静态库依赖在Xcode 3.2.3上的模拟器中编译,在设备上失败

时间:2010-07-08 19:01:01

标签: iphone xcode linker three20 static-libraries

升级到XCode 3.2.3和iPhone 3.2 / 4.0 SDK已经在我的构建过程中引入了一个奇怪的错误。

我有一个静态库,Compton,它本身依赖于three20。我将Compton构建为它支持的客户端应用程序的依赖。

当我在模拟器或设备模式,3.2或4.0 SDK中编译Compton作为它自己的项目时,一切都编译得很好,没有错误。

当我使用3.2或4.0 SDK模拟器编译引用Compton的客户端应用程序时,一切都运行良好,没有编译错误,应用程序在模拟器中按预期运行。 / p>

当我编译完全相同的项目时,除了从模拟器到设备的构建设置之外什么都没有改变,但是,我得到以下链接错误,在看了几个小时的#import语句,搜索路径后,我似乎无法消除这些错误构建设置等。我真的很沮丧的部分是模拟器版本正在构建和运行良好,它似乎是一个小小的配置问题。我正在粘贴下面的错误,看起来Compton类,从在设备模式下构建我的项目的角度来看,不能“看到”三个标题中的一些。

我正在使用三星20的行李箱版本,今天拉了。

以下是链接错误的输出:

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

任何人都可以帮我弄清楚这里可能出现的问题吗?

更新我通过使用fork20和process described here消除了重复符号链接错误,并删除了three20和Compton上的-all_load链接器标志。我坚持的真正疯狂的问题仍然存在:我可以在模拟器中编译并运行应用程序,但在编译设备时,我得到上述链接错误。

更新2:我已解决了问题,添加了答案并接受了答案。问题确实是构建配置设置 - 如果您使用的是4.0 SDK,则需要将“架构”设置为“优化(armv7)”。

2 个答案:

答案 0 :(得分:1)

从我所知道的,你构建了libCompton,同时直接将它改为three20,这只会导致地狱。将静态库链接在一起并尝试在最终项目中使用它并不会很有趣。链接three20也适用于您的应用程序,它应该解决您的问题,compton应该只需要标题以便编译,它只需要在您的应用程序的最终链接中出现这些符号。

答案 1 :(得分:0)

我现在已经解决了这个问题,苹果开发者论坛上得到了答案。如果您将基本SDK设置为> 3.2,您需要将Build settings中的“Architectures”选项设置为Optimized(armv7)。

代码现在可以在模拟器和设备上编译并完成。