Подтвердить что ты не робот

Xcode, дублированный символ _main

У меня есть дубликат символа _main.

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

Любая благодарность, спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

#import "Tools.m"

в

#import "Tools.h"

Ответ 3

У меня также была эта проблема, и она была вызвана кодом, который я импортировал из другого проекта. Я сделал 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, которая вызывала ошибку для меня

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

Вероятно, я заслуживаю того, чтобы поместить категорию в NSObject.

Ответ 10

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

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