Расстраивает ошибка сборки iPhone - PullRequest
3 голосов
/ 26 августа 2010

Я боролся с этим уже несколько часов, и я сыт по горло.Мой проект строится нормально со сборкой симулятора отладки, сборки симулятора выпуска и сборки устройства отладки, но по какой-то причине он не будет собираться со сборкой устройства выпуска.У меня есть статическая библиотека, содержащая мой код cocos2d, и другая статическая библиотека, содержащая игровой движок, который я написал.

Поскольку игровой движок содержит категории, мне пришлось использовать флаг компоновщика all_load, чтобы запустить его.Без этого флага код строится нормально.Однако при попытке запустить игру я получаю нераспознанный селектор для исключения экземпляра.

Вот первая ошибка сборки:

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)

Ld build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless normal armv6
cd /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -L/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -F/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -filelist /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless.LinkFileList -dead_strip -ObjC -all_load -miphoneos-version-min=4.0 /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libChipmunk.a /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a /Users/helixed/Dropbox/Documents/Development/iPhone/BlackHawk/build/Release-iphoneos/libBlackHawk.a -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework OpenGLES -framework OpenAL -framework AVFoundation -framework AudioToolbox -lz -framework iAd -o /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1

А вот вторая:

Ld build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless normal armv7
cd /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -L/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -F/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -filelist /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless.LinkFileList -dead_strip -ObjC -all_load -miphoneos-version-min=4.0 /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libChipmunk.a /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a /Users/helixed/Dropbox/Documents/Development/iPhone/BlackHawk/build/Release-iphoneos/libBlackHawk.a -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework OpenGLES -framework OpenAL -framework AVFoundation -framework AudioToolbox -lz -framework iAd -o /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1

Это единственная мысль, удерживающая меня от выпуска, поэтому я действительно ценюпомощь.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 16 марта 2012

Я столкнулся с подобной проблемой, я случайно включил (#import) файл реализации вместо файла заголовка

Когда компилятор выдает ошибку, что 2 объектных файла содержат дубликат символа, проверьте, как вы включили (#import) класс этого дубликата символа в 2 файла реализации.

3 голосов
/ 27 октября 2011

У меня была эта проблема с добавлением Facebook SDK и Dropbox SDK.Проблема была в том, что оба SDK используют библиотеку JSON, поэтому я удалил один из них, и теперь он работает.

2 голосов
/ 26 августа 2010

У вас есть это дважды в структуре вашего проекта? Проверьте левую сторону XCode, просмотрите все папки и убедитесь, что у вас его нет несколько раз.

1 голос
/ 26 августа 2010

У вас есть другой набор архитектур устройств (armv6, armv7 и т. Д.) В вашей сборке выпуска, нежели в настройках сборки отладки (либо проекта, либо цели, которая переопределяет настройки проекта)?

0 голосов
/ 27 августа 2010

Я думаю, что решение вашей проблемы заключается в нераспознанной проблеме селектора, которую вы пытались решить с помощью флага -all_load. Я использую cocos2d-iphone в статической библиотеке и мне этот флаг не нужен. Если вы прочитали, что он делает, он должен сказать, что это вряд ли связано с вашей проблемой:

Что делает флаг компоновщика -all_load?

Исправлены ссылки на статические библиотеки, содержащие ТОЛЬКО категории и НЕТ классов. Это, конечно, не верно для cocos2d-iphone.

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

Вы также должны включить предупреждение о сборке «Нераспознанный селектор» в настройках сборки проекта, чтобы вы получали это предупреждение при компиляции, а не когда происходит сбой во время игры (тогда уже слишком поздно и вы потратили много времени время). Это одна из настроек, которые я всегда включаю в проекте Xcode.

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