Xcode, дубликат символа main


У меня есть повторяющийся символ _main.

проблема в том, что он говорит " дублировать символ _main в /Users/.../i386 / main-B9843B6026D6EFA4.o и / пользователи/.../i386 / main-B9843B6026D6EFA4.o", XXX и XXX на самом деле то же самое .o файл. Я не знаю, почему он думает, что это дубликат символа, когда он один и тот же .о?!

любая помощь ценится, спасибо.

10 53

10 ответов:

Ах..Я выяснил, что у меня есть несколько записей в разделе Targets/Compiled Sources ( в более новом XCode он находится в разделе Build Phases/Compile Sources ). Я удалил их и проблема решена. Множественная запись, вероятно, связана с git merge.

оказалось, что в моем случае я импортировал a .M файл вместо его .h коллега. Решается путем редактирования

#import "Tools.m"

на

#import "Tools.h"

у меня также была эта проблема, и это было вызвано кодом, который я импортировал из другого проекта. Я сделал grep для "int main" в моем каталоге проекта:

grep -nr "int main" .

и нашли

./main.m:13:int main(int argc, char *argv[])
./IMPORTED_DIR/main.m:13:int main(int argc, char *argv[])

IMPORTED_DIR содержал дополнительный main.m это было причиной ошибки для меня

Я удалил этот файл из проекта - > цели - > этапы сборки - > компилировать список источников, а затем он скомпилирован

Я столкнулся с той же проблемой с использованием двух сторонних фреймворков. (AppLovin и шквал) И я узнал это, удалив "all_load" из "других флагов компоновщика" в настройках сборки.

У меня была та же проблема с открытием проекта, который был создан с Xcode 4.0.2, с Xcode 4.1. Я просто решил, нажав на кнопку "модернизировать проект" (редактор/модернизировать проект). Эта процедура автоматически удаляет все дубликаты.

Если все еще есть проблема, попробуйте выполнить поиск следующим образом: "int main(", и удалите эти файлы, кроме main.м

просто получил эту проблему сам, но после прочтения решения huggie, которое привело меня на правильный путь, я был немного смущен. Итак, текущее решение в Xcode: Выберите проект, цель - > этапы сборки и нажмите Проверить настройки

тогда Xcode автоматически исправит свою собственную ошибку. Это всегда приятно, когда инструменты пытается остановить ваш прогресс ;)

в моем случае я объявил NSString в моем файле констант (импортированном многими классами), но забыл определить его как статический!!

например NSString* PARAMS = @"paramA"; должно быть: static NSString* PARAMS = @"paramA";

чтение полного сообщения об ошибке позволило мне понять это: "дублировать символы PARAMS". Не бойтесь и постарайтесь понять сообщения об ошибках! Иногда они могут даже сказать вам, что именно вы сделали неправильно.

вы можете получить это для имен методов тоже!

Я получил duplicate symbol _runOnMainQueueWithoutDeadlocking после добавления DBCamera через CocoaPods и это было потому, что обе мои категории на NSObject (NSObject+Tools.h) и файл зависимости GPUImage GPUImageOutput.у обоих был метод под названием "runOnMainQueueWithoutDeadlocking".

Мне посчастливилось удалить мой метод из кода, потому что я на самом деле не использовал его больше или нигде.

Это, вероятно, то, что я заслуживаю для сдачи категория на NSObject.

в моем случае я импортировал другой проект, чтобы использовать библиотеку, содержащуюся внутри. Это привело к тому, что мой проект имел два основных.m-файл.

Это было еще более запутанным, так как ошибка не появлялась до нескольких сборок позже.