2010-07-08 1 views
2

Xcode 3.2.3 및 iPhone 3.2/4.0 SDK로 업그레이드하면 빌드 프로세스에 이상한 버그가 있습니다.Xcode 3.2.3에서 시뮬레이터에서 정적 라이브러리 종속성이 컴파일되고 장치에서 오류가 발생합니다.

정적 라이브러리 인 Compton은 자체적으로 320에 종속되어 있습니다. Compton은 클라이언트 응용 프로그램의 종속성으로 구축합니다.

시뮬레이터 또는 장치 모드 (3.2 또는 4.0 SDK)에서 자체 프로젝트로 Compton을 컴파일하면 모든 것이 잘 컴파일되고 오류는 발생하지 않습니다.

3.2 또는 4.0 SDK, 시뮬레이터를 사용하여 Compton을 참조하는 클라이언트 응용 프로그램을 컴파일 할 때 3.2에서 iPhone 또는 iPhone/iPad를 타겟팅하면 모든 것이 잘 작동하고 컴파일 오류가 발생하지 않으며 시뮬레이터에서 예상대로 실행됩니다.

시뮬레이터에서 빌드 설정을 제외하고 정확히 동일한 프로젝트를 컴파일 할 때, #import 명령문, 경로 검색, 빌드 설정, 필자가 정말로 좌절하게되는 부분은 시뮬레이터 버전이 구축되고 실행되고 있다는 것입니다. 이것은 작은 설정 문제처럼 보입니다. 나는 아래의 오류를 붙여 넣고 있는데, 그것은 Compton 클래스처럼 보입니다. 디바이스 모드에서 프로젝트를 빌드하는 관점에서, 320 헤더 중 일부를 "볼"수는 없습니다.

저는 오늘 320의 트렁크 버전을 사용하고 있습니다. 여기에서 잘못 갈 수 무엇

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 : 문제점 2 : 답변을 추가하고 답변을 수락했습니다. 문제는 실제로 build config 설정이었습니다. 4.0 SDK를 사용한다면 "Architectures"를 "Optimized (armv7)"로 설정해야합니다.

+0

동일한 대상과 동일한 구성을 구축하고 있습니까? –

+0

@ cory.m.smith 내 클라이언트 응용 프로그램의 "대상 장치 제품군"이 "iPhone"으로 설정되고 "Base SDK"가 "iPhone 장치 4.0"으로 설정됩니다. 네가 묻고있는거야? – Prairiedogg

+0

이 링크는 유망한 대답을 찾고 있습니다 : http : // stackoverflow.com/questions/2456795/building-iphone-static-library-for-armv6-and-armv7-other-static-l – Prairiedogg

답변

0

이제이 문제가 해결되었으므로 Apple 개발자 포럼에서 답변을 얻었습니다. 기본 SDK를 3.2 이상으로 설정하면 Build settings in Optimized (armv7)에서 "Architectures"옵션을 설정해야합니다.

코드는 이제 컴파일되어 시뮬레이터와 장치에서 잘 처리됩니다.

+1

우리 중 일부는 armv7을 지원하지 않는 iOS 4.0 장치를 가지고 있습니다 ... armv6을 지정하면 특별히이 문제를 해결할 수 있습니다. – jamie

1

내가 말할 수있는 것부터 libCompton을 직접 작성했지만 320에 직접 적용하면 지옥이 생길 것입니다. 정적 라이브러리를 함께 연결하고 최종 프로젝트에서이를 사용하려고 시도하는 것은 재미 있지 않을 것입니다. 여러분의 응용 프로그램에 대해서도 three20을 링크하면 문제를 해결할 수 있습니다. compton은 컴파일하기 위해 헤더가 필요하며, 응용 프로그램의 최종 링크에 해당 심볼이 있어야합니다.

+0

정말 흥미 롭습니다. 그래서 Compton에 대한 빌드 설정에서 정확한 헤더 검색 경로를 320으로 설정했지만 실제로 Compton 프로젝트의 3 개 프로젝트 파일에 대한 참조는 포함하지 않습니다. 대신, 내 응용 프로그램 및 건물의 파일에 대한 참조를 컴플리트가 아닌 응용 프로그램의 종속성으로 삼을 것을 권장합니다. 이 올바른지? – Prairiedogg

+0

예, 다른 정적 라이브러리와 비슷한 작업을 수행했습니다. 이 방법으로 할 수 있고 여전히 armv6 + armv7을 사용하십시오. –