Зависимость статической библиотеки компилируется в симуляторе на Xcode 3.2.3, не работает на устройстве - PullRequest
2 голосов
/ 08 июля 2010

Обновление до XCode 3.2.3 и iPhone 3.2 / 4.0 SDK внесло странную ошибку в мой процесс сборки.

У меня есть статическая библиотека Compton, которая сама зависит от Three20.Я строю Compton как зависимость от клиентских приложений, которые он поддерживает.

Когда я компилирую Compton как его собственный проект в режиме симулятора или устройства, 3.2 или 4.0 SDK, все компилируется нормально, без ошибок.

Когда я компилирую клиентское приложение, которое ссылается на Compton, используя SDK 3.2 или 4.0, симулятор, нацеленный на iPhone или iPhone / iPad на 3.2, все отлично работает, ошибок компиляции нет, и приложение работает в симуляторе должным образом.

Когда я компилирую точно такой же проект, не меняя ничего, кроме настроек сборки с симулятора на устройство, я получаю следующие ошибки компоновки, которые, как мне кажется, я не могу устранить после нескольких часов работы с #import операторами, путями поиска,настройки сборки и т. д. Я действительно разочарован тем, что версии симулятора строятся и работают нормально, это похоже на крошечную проблему с конфигурацией.Я вставляю ошибки ниже, похоже, что классы Compton с точки зрения построения моего проекта в режиме устройства не могут «видеть» некоторые из трех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

Может кто-нибудь помочь мне выяснить, что может быть не так?

Обновление: Я устранил ошибку связывания дублированных символов, используя описанный здесь процесс fork 3 и 1022 * и удалив флаг компоновщика -all_load на three20 и Compton.Остаётся действительно сумасшедшая проблема, на которой я застрял: я могу нормально скомпилировать и запустить приложение в симуляторе, но при компиляции для устройства я получаю вышеуказанные ошибки компоновки.

Обновление 2: Я решил проблему, добавил ответ и принял его.Проблема действительно заключалась в настройке конфигурации сборки - если вы используете 4.0 SDK, вам нужно установить для «Архитектуры» значение «Оптимизировано (armv7)».

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Из того, что я могу сказать, вы создали libCompton, любя его прямо в тройке20, это не вызовет ничего, кроме ада. Соединять статические библиотеки вместе и пытаться использовать это в конечном проекте не будет весело. Привязывайте к вашему приложению три20, и это должно решить ваши проблемы. Компоненту просто нужны заголовки для компиляции, просто эти символы должны присутствовать при окончательном соединении в вашем приложении.

0 голосов
/ 15 июля 2010

Я уже решил эту проблему, ответ пришел на форумах разработчиков Apple. Если для базового SDK установлено значение> 3.2, необходимо установить для параметра «Архитектура» в настройках сборки значение «Оптимизированный» (armv7).

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

...