2010-07-08 56 views
2

升級到XCode 3.2.3和iPhone 3.2/4.0 SDK在我的構建過程中引入了一個奇怪的錯誤。靜態庫依賴關係在Xcode 3.2.3上的模擬器中編譯,在設備上失敗

我有一個靜態庫Compton,它本身依賴於three20。我將Compton建立爲它所支持的客戶端應用程序的依賴。

當我在模擬器或設備模式,3.2或4.0 SDK中編譯Compton作爲其自己的項目時,一切都很好編譯,沒有錯誤。

當我編譯一個客戶端應用程序,該應用程序使用3.2或4.0 SDK,模擬器,針對iPhone上的iPhone或iPhone/iPad 3.2,一切都很好,沒有編譯錯誤,應用程序按照預期在模擬器中運行。

當我編譯完全相同的項目,除了從模擬器到設備的構建設置以外沒有任何改變,但是,我得到了下面的鏈接錯誤,我似乎無法在與#import聲明,搜索路徑,構建設置,等等。我真的很沮喪的部分是模擬器的版本正在建設和運行良好,這似乎是一個小小的配置問題。我粘貼下面的錯誤,看起來像Compton類,從在設備模式下構建我的項目的角度看,無法「看到」一些三個頭。

我使用three20的trunk版本,今天拉。

這裏是鏈接錯誤輸出:

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和process described here的叉子和拆卸three20和康普頓的-all_load鏈接標誌鏈接錯誤。我堅持的真正瘋狂的問題仍然存在:我可以在模擬器中編譯和運行應用程序,但是在編譯設備時,會出現上述鏈接錯誤。

更新2:我解決了問題,添加了答案並接受了它。這個問題確實是一個構建配置設置 - 如果您使用的是4.0 SDK,則需要將「架構」設置爲「優化(armv7)」。

+0

您是否在構建相同的目標和相同的配置? – 2010-07-08 19:46:54

+0

@ cory.m.smith我的客戶端應用程序的「目標設備系列」設置爲「iPhone」,其「基礎SDK」設置爲「iPhone設備4.0」。這是你問的嗎? – Prairiedogg 2010-07-08 21:23:26

+0

這個鏈接看起來很有希望的答案: http:// stackoverflow。com/questions/2456795/building-iphone-static-library-for-armv6 -and-armv7-that-includes-another-static-l – Prairiedogg 2010-07-08 21:41:39

回答

0

我現在已經解決了這個問題,答案是在Apple開發者論壇上發佈的。如果您將基礎SDK設置爲> 3.2,則需要將「生成設置」中的「體系結構」選項設置爲優化(armv7)。

該代碼現在編譯,並在模擬器和設備上很好。

+1

請注意,我們中的一些人有iOS 4.0設備,沒有armv7支持...指定armv6專門解決此問題。 – jamie 2010-12-30 03:29:55

1

從我可以告訴,你建立libCompton而直接喜歡它到three20,這將導致什麼,但地獄。將靜態庫鏈接在一起並試圖在最終的項目中使用它並不會很有趣。將three20與你的應用程序鏈接起來,它應該能夠解決你的問題,compton應該只需要頭文件來編譯,它只需要這些符號出現在應用程序的最終鏈接中。

+0

這真的很有趣 - 所以你說我在Compton的構建設置中,爲three20設置了正確的標題搜索路徑,但實際上並沒有在Compton項目中包含對three20項目文件的引用。相反,您建議將文件引用放到我的應用程序中,並將其構建爲應用程序的依賴項,而不是康普頓。它是否正確? – Prairiedogg 2010-07-15 15:13:03

+0

是的,我用其他靜態庫做了類似的事情。你可以這樣做,並仍然使用armv6 + armv7 – 2010-07-15 18:13:16

相關問題