iPhone: ошибка дублирования символа?


Я получил эту ошибку, когда я нажимаю 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

Я не знаю, с чего начать ?

в чем проблема ?

17 55

17 ответов:

похоже, что вы компилируете один и тот же класс BlogTableItemCell два раза в разных местах вашего кода. Это может произойти в следующих случаях.

  • вы поставили тот же класс реализация в два разных файлы;

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

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

вы также можете получить эту ошибку, если вы по ошибке позволите операторам Xcode автозаполнения для #import указать '.M "файл для класса' duplicate 'вместо'.ч'.

для меня изменение "нет общих блоков" с Да на нет ( в разделе Цели- > настройки сборки - > Apple LLVM-генерация кода ) enter image description here

у меня была похожая проблема из-за плохого определения констант. Я определил константу в моем заголовке:

int const kCropLocationTop = 1;

Это было предположительно импортировано несколько раз. Чтобы исправить я изменил заголовок def следующим образом:

extern int const kCropLocationTop;

и переместил присвоение const к .файл м:

int const kCropLocationTop = 1;

надеюсь, что это поможет всем, кто так же незнаком с простыми объективными концепциями c, как и я!

iPhone: ошибка дублирования символа? по user576924

ответил правильно для меня. Однако, чтобы найти оскорбляющего гремлина этого фрагмента ZSH.

grep "import.*\.m" **/*.[hm]

сразу скажу вам, где ваша ошибка.

по ошибке исходный файл был включен дважды в проект - > этап сборки - > компиляция источников. Удаление одного из них решило проблему.

наиболее распространенной причиной этой ошибки является импорт xyz.M файл вместо xyz.H-файл. Проверьте, если ваш импорт содержит что-то вроде #import "----.m"

просто добавить; использование Xcode для создания подклассов управляемых объектов (Core Data) иногда может дублировать созданные файлы. Для меня исправление состояло в том, чтобы удалить сгенерированные файлы и повторно сгенерировать их.

Я просто столкнулся с этой проблемой сам. Для списка, вот еще одна возможность:

дублированная линия связи в файле проекта.

Я вызвал это слияние конфликтов на обновление SVN, когда я случайно продублировал строку.

Это случилось и со мной тоже. В моем случае один (только один) из моих основных данных автоматически генерируемых классов был вставлен дважды. Я заметил дублирование, посмотрев на этапы сборки...Компиляция Источников. Простое удаление одного из вхождений решило проблему.

добавление еще одной возможной причины в список... возможно, вы ошибочно создали несколько констант в файле реализации, но вне реализации, с тем же именем.

В HeaderFileOne.м

NSString * const kCoolConstant = @"cool";

В HeaderFileTwo.м

NSString * const kCoolConstant = @"cool";

таким образом, изменение одного из этих постоянных имен исправит ошибку компиляции.

Я тоже столкнулся с этой проблемой. Мое решение было переименовать одну из глобальных переменных, которая имеет то же имя, что и в другом классе. Надеюсь, это поможет

Это может помочь кому-то

Я получил эту ошибку, потому что я дублирую ViewController, а затем переименовал его. Поэтому при компиляции я получил эту ошибку. Причина заключалась в том, что в обоих контроллерах представления была переменная "float" с тем же именем, т. е. "float padding=10.0", которую я определил на уровне класса. Переименование имени вышеупомянутой переменной в одном из контроллеров представления решило мою проблему.

то же самое произошло со мной, когда я играл с локализуемыми файлами xib, случайно я создал два файла реализации и апперически вызвал проблему в моем случае. После удаления / повторного создания файла реализации без выполнения той же ошибки, Ошибка была исправлена.

один из наших разработчиков оставил файлы проекта "libSoomla*" там дважды. Я удалил дубликаты файлов soomla, перестроил, и это исправило его!

надеюсь, что это помогает.

в мае я выполнил некоторые инструкции по созданию новой версии 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)

убедитесь, что вы не импортировали .m-файл. Для меня это произошло я добавил #import " SchoolCommuterHome.m "вместо # import" SchoolCommuterHome.h"