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