Xcode, дубликат символа main
У меня есть повторяющийся символ _main.
проблема в том, что он говорит " дублировать символ _main в /Users/.../i386 / main-B9843B6026D6EFA4.o и / пользователи/.../i386 / main-B9843B6026D6EFA4.o", XXX и XXX на самом деле то же самое .o файл. Я не знаю, почему он думает, что это дубликат символа, когда он один и тот же .о?!
любая помощь ценится, спасибо.
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.