Ошибка повторяющегося символа в сборке Objective-C? - PullRequest
57 голосов
/ 15 февраля 2010

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

172 голосов
/ 25 апреля 2011

Вы также можете получить эту ошибку, если по ошибке позволите автозаполнению Xcode для операторов #import указать файл .m для класса «duplicate» вместо «.h».

65 голосов
/ 15 февраля 2010

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

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

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

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

39 голосов
/ 21 ноября 2015

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

25 голосов
/ 17 февраля 2012

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

int const kCropLocationTop = 1;

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

extern int const kCropLocationTop;

и перенес назначение const в файл .m:

int const kCropLocationTop = 1;

Надеюсь, это поможет любому, кто не знает простогообъективные понятия как я!

18 голосов
/ 04 июля 2012

По ошибке исходный файл был дважды включен в Project -> Build Phase -> Compile Sources. Удаление одного из них решило проблему.

18 голосов
/ 03 ноября 2011

iPhone: ошибка повторяющегося символа? от пользователя576924

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

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

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

8 голосов
/ 30 мая 2013

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

4 голосов
/ 22 августа 2012

Просто добавить; Использование XCode для генерации управляемых объектов с подклассами (Базовые данные) может иногда дублировать созданные файлы Для меня исправлением было удалить сгенерированные файлы и заново сгенерировать их.

3 голосов
/ 07 июля 2011

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

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

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

2 голосов
/ 04 мая 2016

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

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

...