Ошибка повторяющегося символа в сборке Objective-C?
Я получил эту ошибку, когда я нажимаю build + debug:
ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Ответы
Ответ 1
Кажется, что вы компилируете один и тот же класс BlogTableItemCell два раза в разных местах вашего кода. Это может произойти в следующих случаях.
-
Вы поместили тот же класс
реализации в два разных
файлы;
-
На самом деле у вас есть только один
реализация этого класса, однако
вы также связываете в своем проекте структуру
или библиотеку, содержащую класс
имя точно совпадает с вашим.
Попробуйте найти во всем проекте свой класс и убедитесь, что в вашем проекте доступна только одна копия.
Ответ 2
Вы также можете получить эту ошибку, если по ошибке разрешите автозаполнение Xcode для операторов #import, указав файл ".m" для класса "duplicate" вместо ".h".
Ответ 3
Для меня изменение "Нет общих блоков" от "Да" до "Нет" (в разделе "Цели" → "Настройки сборки" → "Apple LLVM - генерация кода" )
![enter image description here]()
Ответ 4
У меня была аналогичная проблема из-за плохого определения констант.
Я определил const в моем заголовке:
int const kCropLocationTop = 1;
Это предположительно было импортировано несколько раз. Чтобы исправить, я изменил определение заголовка следующим образом:
extern int const kCropLocationTop;
и переместил назначение const в файл .m:
int const kCropLocationTop = 1;
Надеюсь, что это поможет любому, кто не знает простых объективных понятий, как я!
Ответ 5
iPhone: ошибка повторяющегося символа? от пользователя576924
ответил мне правильно. Однако найти оскорбительного гремлина этот фрагмент ZSH.
grep "import.*\.m" **/*.[hm]
Немедленно сообщит вам, где ваша ошибка.
Ответ 6
По ошибке исходный файл дважды включался в Project → Build Phase → Compile Sources. Удаление одного из них решило проблему.
Ответ 7
Наиболее распространенной причиной этой ошибки является импорт файла xyz.m вместо файла xyz.h.
Проверьте, содержит ли ваш импорт что-то вроде #import "----.m"
Ответ 8
Просто добавьте; Использование Xcode для создания подкласса управляемых объектов (Core Data) иногда может дублировать сгенерированные файлы. Для меня исправить было удаление сгенерированных файлов и их повторное создание.
Ответ 9
Я сам столкнулся с этой проблемой. Для списка здесь другая возможность:
Дублированная линия ссылок в файле проекта.
Я вызвал эти конфликты слияния при обновлении SVN, когда я случайно продублировал строку.
Ответ 10
Это случилось и со мной. В моем случае один (только один) из моих основных данных автоматически созданных классов был вставлен дважды. Я заметил дублирование, посмотрев на фазы сборки... Скомпилировать источники. Простое удаление одной из проблем решило проблему.
Ответ 11
Добавление другой возможной причины в список... Возможно, вы ошибочно создали несколько констант в файле реализации, но вне реализации с тем же именем.
В HeaderFileOne.m
NSString * const kCoolConstant = @"cool";
В HeaderFileTwo.m
NSString * const kCoolConstant = @"cool";
Таким образом, изменение одного из этих постоянных имен приведет к исправлению ошибки компиляции.
Ответ 12
Я также столкнулся с этой проблемой. Мое решение было переименовано в глобальную переменную, которая имеет одно имя в другом классе. Надеюсь, что это поможет
Ответ 13
Это может помочь кому-то
Я получил эту ошибку, потому что дублирую ViewController и переименовал ее. Поэтому, когда я компилирую, я получил эту ошибку. Причина в том, что в обоих контроллерах представлений есть переменная с плавающей точкой с тем же именем i.e "float padding = 10.0", которое я определил на уровне класса.
Переименование имени вышеупомянутой переменной в одном из контроллеров представления решило мою проблему.
Ответ 14
То же самое произошло со мной, когда я играл с локализованными xib файлами, случайно создал два файла реализации и, что особенно важно, вызвало проблему в моем случае. После удаления/воссоздания файла реализации без какой-либо ошибки ошибка была исправлена.
Ответ 15
Один из наших разработчиков дважды оставил файлы проекта "libSoomla *". Я удалил дубликаты файлов soomla, перестроил и исправил их!
Надеюсь, что это поможет.
Ответ 16
В этом случае я выполнил некоторые инструкции по созданию более новой версии Subversion, которая побудила меня создать эту символическую ссылку:
ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
Теперь я действительно парень Windows, поэтому мне это не сразу показалось, но удаление ссылки исправлено для меня (после перезапуска XCode):
rm /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
Уф.
(Фактическая ошибка, которую я получил, была описана здесь:
создать дубликаты ошибок arclite.o)
Ответ 17
Убедитесь, что вы не импортировали файл .m. Для меня это произошло, я добавил #import "SchoolCommuterHome.m" вместо #import "SchoolCommuterHome.h"