повторяющийся символ _OBJC_METACLASS _ $ _ ClassName - PullRequest
44 голосов
/ 17 марта 2011

Я пытаюсь запустить свое приложение cocos2d и сталкиваюсь с этой ошибкой, поскольку недавно я обновил свой sdk до 4.2, а мой cocos2d до 0.99.5.

Я пытался очистить свой проект, даже изменив целевой iosРазвертывание, но ошибка остается той же.Также переименуйте className также, чтобы избежать дублирования имен классов библиотеки cocos2d.

ld: дублирующий символ _OBJC_METACLASS _ $ _ MenuSceneNew в / Users / umaidsaleem / Desktop / functionsTest / build / Debug-iphonesimulator / libcocos2dlibrary.a (MenuScene.o) и /Users/umaidsaleem/Desktop/functionalityTest/build/functionalityTest.build/Debug-iphonesimulator/functionalityTest.build/Objects-normal/i386/MenuScene.o

Ответы [ 17 ]

165 голосов
/ 15 сентября 2011

Еще одна довольно простая вещь, которую нужно проверить, это то, что вы случайно не #import файл .m вместо заголовочного файла .h.

Случилось со мной.

53 голосов
/ 17 марта 2011

Вы связываете файл MenuScene.m дважды. По-видимому, он есть в статической библиотеке, а также в вашем основном приложении.

37 голосов
/ 19 июля 2012

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

В итоге я получил две ссылки на заголовок и реализацию как в корне проекта, так и в моей группе моделей. Удаление самых верхних ссылок на файлы .h и .m избавило от ошибки компоновки.

24 голосов
/ 20 июля 2016

Иногда Core Data вставляет AnyProjectNameModel.xcdatamodeld в источники компиляции фаз сборки. Проверьте и удалите, и все снова запустится ... Сообщение об ошибке просто указывает на сгенерированные объекты ManagedObjects ... Правильным местом для AnyProjectNameModel.xcdatamodeld являются ресурсы Copy Bundle на этапах сборки. enter image description here

15 голосов
/ 23 октября 2013

Проверьте источники компиляции вашей цели и посмотрите, включен ли файл class.m дважды

6 голосов
/ 15 июля 2014

Я сделал глупую ошибку, назвав свой @implementation таким же, как мой суперкласс.

В .h

@interface Subclass : Superclass
@end

В .m

#import "Subclass.h"

@implementation Superclass
@end

Ни одно из регулярных предложений от Google, похоже, не помогло, поэтому, если кто-то настолько же сумасшедший или усталый, как я (возможно, здоровое сочетание обоих), убедитесь, что вы не продублировали @implementation!

4 голосов
/ 15 ноября 2017

В моем случае это происходило из-за того, что Xcode автоматически генерировал мой класс NSManagedObject, который затем конфликтовал с моим классом NSManagedObject, созданным вручную. В этом случае вы можете установить «Codegen» на «Manual / None» в инспекторе моделей данных для вновь созданного объекта.

3 голосов
/ 10 февраля 2015

Для меня удаление -all_load из 'Другие флаги компоновщика' решило проблему.

2 голосов
/ 15 августа 2011

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

Я знаю, что ОП решил их проблему, но я чувствовал, что это может помочь кому-то еще, кто читает этот вопрос, ища помощи.

2 голосов
/ 19 сентября 2012

Еще одна вещь, которую нужно проверить на наличие двойной ссылки - возможно, чтобы один и тот же файл находился в двух разных местах в списке файлов слева. Затем компилятор компилирует и связывает его дважды.

Это происходит, например, при организации иерархии файлов.

Вам не нужно создавать библиотеку или что-то необычное - просто перетащите .m в два разных места в дереве проекта.

Не забудьте удалить только ссылку на один из них, очистка файлов не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...