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

Ошибка повторяющегося символа в сборке 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
4b9b3361

Ответ 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"