2013-10-30 3 views
3

저는 Poco 라이브러리 1.4.5-all을 사용하고 있었고 최근에 Xcode를 5.0.1로 업그레이드했습니다. 어떻게 든 나는 Poco 라이브러리를 iPhone 장치 용으로 연결하는 데 문제가있어서 최신 Poco 라이브러리 (poco-1.4.6p2-all)를 사용하여 iPhone 장치를 제대로 연결할 수있었습니다.Poco 라이브러리 1.4.6 iPhone 시뮬레이터 용 Xcode 5 빌드

Xcode5.0.1에는 llvm 명령 지원이 없으므로 라인,이 같은 아이폰 장치에 대한 포코 라이브러리를 구축했다. 아이폰 장치 구축 할 때

./configure --config=iPhone-clang-libc++ -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL 
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=arm64 -s -j4 
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 -s -j4 
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv6 -s -j4 

그래서 그것을 잘 작동합니다 ('빌드/설정/아이폰 연타-의 libC++'파일의 변경 CXXFLAGS을하려면 openssl 라이브러리와 링크합니다).

문제는 iPhone 시뮬레이터 용으로 제작 한 경우입니다. 건축물 i386에 '정의되지 않은 심볼'이 너무 많습니다.

이것이 내가 iPhoneSimulator 용 Poco 라이브러리를 제작 한 이유입니다.

다음 명령을 실행했습니다.

./configure --config=iPhoneSimulator-clang-libc++ -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL 
make 

그리고 결과는 문제가되었습니다. (아키텍처 i386에 대한 '정의되지 않은 심볼'이 너무 많습니다.)

두 라이브러리 간의 차이점을 확인했습니다. 'nm'공구 결과는 다음과 같습니다. (문제)

는 i686

00000050 T __ZN4Poco12DigestEngine11digestToHexERKNSt3__16vectorIhNS1_9allocatorIhEEEE 
000001e8 S __ZN4Poco12DigestEngine11digestToHexERKNSt3__16vectorIhNS1_9allocatorIhEEEE.eh 
00000198 s __ZZN4Poco12DigestEngine11digestToHexERKNSt3__16vectorIhNS1_9allocatorIhEEEEE6digits 

하는 ARMv7 (확인)

0000001c T __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE 
00000280 S __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE.eh 
00000228 s __ZZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEEE6digits 

는이 문제에 대한 단서가 될 수 있는가?

아무도 iPhoneSimulator 용 건물을 성공적으로 만들었습니까?

미리 감사드립니다. Bruce.

답변

0

iPhone 기기와 iPhoneSimulator 모두를 올바르게 관리 할 수있었습니다.

이벤트 Xcode5.0.1은 명령 줄에 llvm을 지원하지 않으므로 '코디용 명령 줄 도구'를 다운로드 할 수 있습니다. 설치하면 llvm을 사용할 수 있습니다. 따라서 'iPhone'과 'iPhoneSimulator'(iPhone-clang-libC++ 및 iPhone-clang-libC++ 구성 사용 불필요)의 빌드 구성을 사용할 수 있습니다.

'nm'도구가 문제를 표시합니다. 바르게. iPhoneSimulator 용으로 건물을 만들 때 뭔가 잘못되었습니다.

그래서, 저는 여러분에게 빠른 픽스를 보여 드리겠습니다.

1) 다운로드 한 'poco-1.4'로 이동하십시오.6P2 모두 '디렉토리

2) 개방 빌드/설정/아이폰 파일

vim build/config/iPhone 

3)이이이

CC  = /usr/bin/llvm-gcc 
CXX  = /usr/bin/llvm-g++ 

에 두 줄

CC  = $(shell ls $(TOOL_PREFIX)/llvm-gcc-$(GCC_VER)* | tail -1) 
CXX  = $(shell ls $(TOOL_PREFIX)/llvm-g++-$(GCC_VER)* | tail -1) 

다음 변경 원본 스크립트가 잘못된 위치에서 'llvm-gxx'를 호출하려고하기 때문입니다. 'Maverick 용 CommandLine Tools'는 '/ usr/bin'디렉토리에 'llvm-gxx'에 대한 심볼릭 링크를 생성합니다.

죄송합니다. 아름다운 스크립트는 아니지만 고정 배선 된 것입니다.

4) 'CXXFLAGS'를 찾고 'openssl'include & lib 디렉토리를 지정하십시오. (cource 중 당신은 사전에 내장되어 있어야합니다.)

CXXFLAGS  = $(OSFLAGS) -Wall -Wno-sign-compare -L(Your openssl source directory)/lib/iOS -I(Your openssl source directory)/include 

5) 이제 해당 구성 파일을 사용하여 완료됩니다. 저장하고 닫습니다.

6) 다음, 개방 빌드/설정/iPhoneSimulator 파일

vim build/config/iPhoneSimulator 

7

)이 'OSFLAGS'을 찾아이

# OSFLAGS   = -arch $(POCO_TARGET_OSARCH) -isysroot $(IPHONE_SDK_BASE) -miphoneos-version-min=$(IPHONE_SDK_VERSION_MIN) 

8) 완료처럼 주석 처리합니다. 그것을 저장하고 그것을 닫으십시오.

9) 이제 'iPhone'장치 용 라이브러리를 빌드하기위한 다음 명령을 실행하십시오.

./configure --config=iPhone -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL 
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 -s -j4 

다른 아키텍처 용 라이브러리를 빌드해야하는 경우 추가하십시오.

10) 완료. 이제 'iPhoneSimulator'가

make clean 
./configure --config=iPhoneSimulator -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL 
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=i686 -s -j4 

위, 나는 그 잘 컴파일러 인식하지 오전 ... 설정 파일 내 문제에 대한 솔루션입니다 구축하도록 변경 마지막 행은 & 링커가 너무 거즈에 대한 라이브러리를 구축하는 명령을 다음과 화재 원본 스크립트의 문제점이 무엇인지 잘 모르겠습니다.

11) 완료. 마지막으로, 이와 같이 2의 라이브러리 내용을 비교하십시오.

nm lib/iPhoneOS/armv7/libPocoFoundation.a | grep digestToHex 
nm lib/iPhoneSimulator/i686/libPocoFoundation.a | grep digestToHex 

당신의 서명을 볼 수 컴파일 된 C++ 함수 'digestToHex'동일한 예를 들면 다음과 같습니다 ..

[email protected] ~/Downloads/poco-1.4.6p2-all $ nm lib/iPhoneOS/armv7/libPocoFoundation.a | grep digestToHex         [ruby-1.9.3-p125] 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list 
0000001c T __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE 
00000280 S __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE.eh 
00000228 s __ZZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEEE6digits 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list 
[email protected] ~/Downloads/poco-1.4.6p2-all $ nm lib/iPhoneSimulator/i686/libPocoFoundation.a | grep digestToHex       [ruby-1.9.3-p125] 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list 
00000050 T __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE 
00000268 S __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE.eh 
00000218 s __ZZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEEE6digits 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list 
[email protected] ~/Downloads/poco-1.4.6p2-all $        

12

)는 '지방 도서관'을해야하는 경우 다음에서 '사러가'명령을 호출 귀하의 터미널. 예를 들어, 은 모든 * .a 파일에 대해 다음과 같은 명령을 반복적으로 실행하는 간단한 쉘 스크립트를 만들 수 있습니다.

lipo -create -output "${UNIVERSAL_DIR}/${FILE1}" "${SIMULATOR_DIR}/${FILE1}" "${ARMV7_DIR}/${FILE1}"     

그게 전부입니다.

0

그렇다면 OSX10을 실행하는 사람들에게.8 + XCode5, mavericks 솔루션은 실제로 작동하지 않습니다. 대체 솔루션을 찾았습니다.

또 다른 옵션은 clang 컴파일러를 사용하는 것입니다. 나는 아직 조심하지 말고 이것을 시험해 보지 않았다. compile..beyond 것 같다 않는하지 않도록

마시고 디렉토리 개방 빌드/설정/아이폰에서

이와 CC와 CXX 대체 :

CC    = $(shell xcrun -find -sdk iphoneos clang) 
CXX    = $(shell xcrun -find -sdk iphoneos clang++) 

나는이 솔루션을 통해 온을 here

관련 문제