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 ответов:
похоже, что вы компилируете один и тот же класс BlogTableItemCell два раза в разных местах вашего кода. Это может произойти в следующих случаях.
вы поставили тот же класс реализация в два разных файлы;
на самом деле у вас есть только один реализация этого класса, однако вы также связываете в своем проекте фреймворк или библиотека, содержащая класс, чей имя точно такое же твой.
попробуйте найти во всем проекте свой класс и убедитесь, что в вашем проекте доступна только одна копия.
вы также можете получить эту ошибку, если вы по ошибке позволите операторам Xcode автозаполнения для #import указать '.M "файл для класса' duplicate 'вместо'.ч'.
для меня изменение "нет общих блоков" с Да на нет ( в разделе Цели- > настройки сборки - > Apple LLVM-генерация кода )
у меня была похожая проблема из-за плохого определения констант. Я определил константу в моем заголовке:
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)