2011-10-17 1 views
10

에 대한 링크 해결 방법은 libarclite_iphoneos.a을 추가하는 것입니다. 시뮬레이터 용 버전도 libarclite_iphonesimulator.a입니다.는 조건부 나는 아이폰 OS 4.3 시뮬레이터 (엑스 코드 4.2) 내 응용 프로그램을 실행하려고 할 때와, 내가 @autoreleasepool을 {쳤을 때, 나는} 충돌 @autoreleasepool

두 라이브러리를 프로젝트에 추가하여 시뮬레이터와 하드웨어 모두에서 실행되도록해야합니다. 그러나 내가 만들면 다른 라이브러리가 지원되지 않는 아키텍처를위한 것이라고 불평합니다. 예를 들어

, 시뮬레이터 구축 :

ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/ 
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture 
i386 in file 

가 어떻게 동시에이 두 가지 문제를 해결합니까? 아니면 지금은 낡은 NSAutoreleasePool 구문을 고수해야합니까?

+0

llvm-gcc-4.2의 빌드 설정에서 컴파일러를 변경하면 문제가 해결 될 것 같습니다. –

+0

이후로 수정 된 것 같습니다. 나는 몇 달 안에 그것에 들어 가지 않았다. –

답변

10

깨끗하고 깨끗한 폴더, iPhone 시뮬레이터 재설정 및 재시작과 같은 시험 후에 대상 빌드 설정의 IPHONE_DEPLYMENT_TARGET을 (를) iOS 5.0에서 iOS 4.2로 변경했습니다. Worked.

+0

다시 테스트 해 봅시다. 아마도 수정되었을 것입니다. 감사. –

+0

@ amosel : 어느 xcode 버전을 사용하고 있습니까? 4.2. 또는 4.2.1? –

+0

@JohannesRudolph 4.2 빌드 4D199을 사용합니다. – amosel

1

기타 링커 플래그 빌드 설정을 사용하여 라이브러리에 링크하고 "모든 iOS"또는 "모든 iOS 시뮬레이터"여부에 따라 값을 특수화 할 수 있습니다.

+0

이것이 효과가있는 것처럼 보입니다. 나는 그것에 대해 연구 중이다. :) –

+1

@StevenFisher : 왜 이것이 처음부터 필요한지에 대해 다소 신비 스럽습니다. 배포 대상이 5.0 이전 버전으로 설정되면 Clang이 적절한 라이브러리에 연결되어야합니다. –

+0

좋은 지적. 좀 더 테스트를 했어. 그것은 시뮬레이터에 대해서만 컴파일 할 때 문제가되는 것처럼 보입니다. 장치 용으로 컴파일 할 때 자동으로 장치가 포함됩니다. 'LIBRARY_SEARCH_PATHS'와'-larclite_iphonesimulator'에'$ {PLATFORM_DEVELOPER_USR_DIR}/lib/arc'을'OTHER_LDFLAGS [sdk = iphonesimulator *] [arch = *]'에 추가해야만했습니다. iOS 하드웨어. 따라서 이것은 거의 확실한 버그입니다. –

0

두 정적 라이브러리를 하나의 유니버설 라이브러리에 병합 할 수도 있습니다. 터미널로 이동

file /where/you/put/it/libarclite_universal.a 

(터미널에서) 말함으로써

lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a 

당신은 결과 파일을 확인할 수 있습니다 말한다 그것은해야 출력 :

libarclite_universal.a: Mach-O universal binary with 3 architectures 
libarclite_universal.a (for architecture i386):current ar archive random library 
libarclite_universal.a (for architecture armv6):current ar archive random library 
libarclite_universal.a (for architecture armv7):current ar archive random library 

이 lib 디렉토리가 정적으로 링크되어 있기 때문에

, 앱에 필요한 것이 무엇이든 최종 앱에 링크되기 때문에 포함 된 시뮬레이션 라이브러리로 인해 최종 앱이 늘어나지 않습니다.