Обновление до XCode 3.2.3 и iPhone 3.2 / 4.0 SDK внесло странную ошибку в мой процесс сборки.
У меня есть статическая библиотека Compton, которая сама зависит от three20. Я строю Compton как зависимость от клиентских приложений, на которых он работает.
Когда я компилирую Compton как собственный проект в режиме симулятора или устройства, 3.2 или 4.0 SDK, все компилируется нормально, без ошибок.
Когда я компилирую клиентское приложение, которое ссылается на Комптон с помощью SDK 3.2 или 4.0, симулятора, ориентируясь на iPhone или iPhone / iPad на 3.2, все работает отлично, без ошибок компиляции, и приложение работает в симуляторе должным образом.
Однако, когда я компилирую один и тот же проект, ничего не меняя, кроме настроек сборки, от симулятора к устройству, я получаю следующие ошибки связывания, которые я не могу устранить после нескольких часов возни с операторами #import
, путями поиска, настройками сборки, и т. д. Что меня действительно расстроило, так это то, что версии симуляторов строятся и работают нормально, это похоже на крошечную небольшую проблему с конфигурацией. Я вставляю ошибки ниже, похоже, что классы Комптона с точки зрения построения моего проекта в режиме устройства не могут «видеть» некоторые из трех20 заголовков.
Пользуюсь транковой версией three20, сегодня потянул.
Вот результат ошибок связывания:
Ld build/NewBlankComptonTemplate.build/Debug-iphoneos/NewBlankComptonTemplate.build/Objects-normal/armv7/NewBlankComptonTemplate normal armv7
cd /Users/wiley/iphone_projects/ComptonQuizzes/NewBlankComptonTemplate
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -L/Users/wiley/iphone_projects/ComptonQuizzes/NewBlankComptonTemplate/build/Debug-iphoneos -F/Users/wiley/iphone_projects/ComptonQuizzes/NewBlankComptonTemplate/build/Debug-iphoneos -filelist /Users/wiley/iphone_projects/ComptonQuizzes/NewBlankComptonTemplate/build/NewBlankComptonTemplate.build/Debug-iphoneos/NewBlankComptonTemplate.build/Objects-normal/armv7/NewBlankComptonTemplate.LinkFileList -dead_strip -ObjC -miphoneos-version-min=4.0 -framework Foundation -framework UIKit -framework CoreGraphics -framework AudioToolbox -framework AVFoundation -framework CFNetwork -framework MediaPlayer -framework MessageUI -framework MobileCoreServices -framework QuartzCore -framework StoreKit -framework SystemConfiguration -lxml2 -lz.1.2.3 /Users/wiley/iphone_projects/ComptonQuizzes/libs/Compton/src/build/Debug-iphoneos/libCompton.a -o /Users/wiley/iphone_projects/ComptonQuizzes/NewBlankComptonTemplate/build/NewBlankComptonTemplate.build/Debug-iphoneos/NewBlankComptonTemplate.build/Objects-normal/armv7/NewBlankComptonTemplate
Undefined symbols:
"_OBJC_CLASS_$_TTStyleSheet", referenced from:
objc-class-ref-to-TTStyleSheet in AppDelegate.o
"_OBJC_CLASS_$_TTURLAction", referenced from:
objc-class-ref-to-TTURLAction in AppDelegate.o
"_OBJC_CLASS_$_TTRoundedRectangleShape", referenced from:
objc-class-ref-to-TTRoundedRectangleShape in libCompton.a(ComptonStyleSheet.o)
"_OBJC_METACLASS_$_TTDefaultStyleSheet", referenced from:
_OBJC_METACLASS_$_ComptonStyleSheet in libCompton.a(ComptonStyleSheet.o)
"_OBJC_CLASS_$_TTView", referenced from:
objc-class-ref-to-TTView in libCompton.a(ComptonQuizStartController.o)
"_OBJC_CLASS_$_TTShapeStyle", referenced from:
objc-class-ref-to-TTShapeStyle in libCompton.a(ComptonQuizStartController.o)
"_OBJC_CLASS_$_TTInnerShadowStyle", referenced from:
objc-class-ref-to-TTInnerShadowStyle in libCompton.a(ComptonQuizStartController.o)
"_OBJC_METACLASS_$_TTViewController", referenced from:
_OBJC_METACLASS_$_ComptonFeedbackController in libCompton.a(ComptonFeedbackController.o)
_OBJC_METACLASS_$_ComptonCatalogController in libCompton.a(ComptonCatalogController.o)
_OBJC_METACLASS_$_ComptonQuizStartController in libCompton.a(ComptonQuizStartController.o)
_OBJC_METACLASS_$_PILAppAdViewController in libCompton.a(PILAppAdViewController.o)
_OBJC_METACLASS_$_ComptonQuizController in libCompton.a(ComptonQuizController.o)
"_OBJC_CLASS_$_TTURLCache", referenced from:
objc-class-ref-to-TTURLCache in libCompton.a(ComptonFeedbackController.o)
"_OBJC_CLASS_$_TTSolidBorderStyle", referenced from:
objc-class-ref-to-TTSolidBorderStyle in libCompton.a(ComptonQuizStartController.o)
"_OBJC_CLASS_$_TTViewController", referenced from:
_OBJC_CLASS_$_ComptonFeedbackController in libCompton.a(ComptonFeedbackController.o)
_OBJC_CLASS_$_ComptonCatalogController in libCompton.a(ComptonCatalogController.o)
_OBJC_CLASS_$_ComptonQuizStartController in libCompton.a(ComptonQuizStartController.o)
_OBJC_CLASS_$_PILAppAdViewController in libCompton.a(PILAppAdViewController.o)
_OBJC_CLASS_$_ComptonQuizController in libCompton.a(ComptonQuizController.o)
"_OBJC_CLASS_$_TTNavigator", referenced from:
objc-class-ref-to-TTNavigator in AppDelegate.o
"_OBJC_CLASS_$_TTPostController", referenced from:
objc-class-ref-to-TTPostController in libCompton.a(ComptonFeedbackController.o)
"_OBJC_CLASS_$_TTRoundedRightArrowShape", referenced from:
objc-class-ref-to-TTRoundedRightArrowShape in libCompton.a(ComptonStyleSheet.o)
"_OBJC_CLASS_$_TTButton", referenced from:
objc-class-ref-to-TTButton in libCompton.a(ComptonFeedbackController.o)
"_OBJC_CLASS_$_TTSolidFillStyle", referenced from:
objc-class-ref-to-TTSolidFillStyle in libCompton.a(ComptonQuizStartController.o)
"_OBJC_CLASS_$_TTWebController", referenced from:
objc-class-ref-to-TTWebController in AppDelegate.o
"_TTScreenBounds", referenced from:
-[ComptonCatalogController viewDidLoad] in libCompton.a(ComptonCatalogController.o)
-[PILAppAdViewController viewDidLoad] in libCompton.a(PILAppAdViewController.o)
"_OBJC_CLASS_$_TTDefaultStyleSheet", referenced from:
_OBJC_CLASS_$_ComptonStyleSheet in libCompton.a(ComptonStyleSheet.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
Может ли кто-нибудь помочь мне понять, что здесь может быть не так?
Обновление: я устранил ошибку связывания повторяющихся символов, используя вилку three20 и описанный здесь процесс и удаление флага компоновщика -all_load на three20 и Compton. По-настоящему сумасшедшая проблема, на которой я застрял, остается: я могу скомпилировать и запустить приложение в симуляторе, но при компиляции для устройства я получаю указанные выше ошибки связывания.
Обновление 2: я решил проблему, добавил ответ и принял его. Проблема действительно заключалась в настройке конфигурации сборки - если вы используете 4.0 SDK, вам нужно установить «Архитектуры» на «Оптимизированные (armv7)».
2 ответа
Я решил эту проблему, ответ пришел на форумах разработчиков Apple. Если вы установите базовый SDK на> 3.2, вам необходимо установить для параметра «Архитектуры» в настройках сборки значение «Оптимизировано» (armv7).
Теперь код компилируется и отлично работает на симуляторе и устройстве.
Насколько я могу судить, вы создали libCompton, а вам понравилась его версия three20, это не вызовет ничего, кроме ад. Связывание статических библиотек вместе и попытки использовать их в окончательном проекте не принесут удовольствия. Свяжите three20 с вашим приложением, и это должно решить ваши проблемы, compton должны просто нуждаться в заголовках для компиляции, ему просто нужно, чтобы эти символы присутствовали при окончательной компоновке в вашем приложении.
Похожие вопросы
Связанные вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].