2010-08-01 3 views
51

У меня есть дубликат символа _main.Xcode, повторяющийся символ _main

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

Любая помощь приветствуется, спасибо.

+0

Это может произойти, если имеется несколько вхождений функции main(). – ilgaar

ответ

85

Ah..I выясняет, что у меня есть несколько записей в разделе Targets/Compiled Sources (в новом XCode он находится в разделе «Фазы сборки»/«Скомпилировать источники»). Я удалил их, и проблема решена. Многопользовательская вещь, вероятно, связана с объединением Git.

+1

Я до сих пор не понял, что ... какие-нибудь другие идеи? – logixologist

+0

вы действительно сэкономили много усилий –

+0

У меня был дубликат main из TBXML (который я только что добавил) – Jacksonkr

3

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

+0

Это действительно сработало для меня. Благодаря! – Imran

2

Если все еще есть проблемы, попробуйте искать так: «Int основных (» и удалить эти файлы, кроме main.m

2

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

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

+1

Где это должно быть? – Kaptain

+0

Это потрясающе, никогда не видел этого раньше. Просто перейдите к этапам сборки проекта, и вы можете найти «Проверить настройки» в меню «Редактор». Работал для меня! –

15

У меня также была эта проблема м, и это было вызвано кодом, который я импортировал из другого проекта. Я сделал Grep для «ИНТ главный» в моем каталоге проекта:

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, который вызывает ошибку для меня

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

+0

Я сделал поиск по int main, и у меня было два равных файла, я удалил один и выполнил проект. спасибо;) –

+0

Я запустил 'grep -nr 'int main" .' и нашел образец проекта в рамках моего проекта, который пришел как часть загрузки SDK, которую я добавил. Узнав это, я удалил эти файлы с помощью Xcode и voilà! Проект теперь строится. Благодарю. –

23

Оказалось, что в моем случае я импортировал .m fi le вместо его .h-аналога. решаемые редактирования

#import "Tools.m" 

в

#import "Tools.h" 
+0

Большое вам спасибо! После того, как я пробовал все другие решения, простой поиск для .m "в моем проекте показал импорт файла .m. –

+1

У меня была такая же проблема после изменения иерархии наследования. Спасибо. – orkoden

+0

Только что получил это. Спасибо! – jsd

2

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

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

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

0

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

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

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

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

0

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

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

6

Я столкнулся с той же проблемой, используя две сторонние рамки. (AppLovin and Flurry) И я узнал, что удалив «all_load» из «Другие флаги компоновщика» в настройках сборки.

Смежные вопросы