標籤:
一、POCO C++ library簡介
POCO C++ library是一個C++編寫的跨平台庫,主要實現網路連接、資料庫管理以及伺服器,適用於跨平台、嵌入式。
二、為Xcode編譯POCO C++ 靜態庫
1、確定需要編譯的版本
要想使POCO C++在iOS的各個平台上運行,那麼需要針對各個平台的不同架構進行編譯,因此我們需要瞭解iOS各個平台的架構,主要分為iPhone模擬器、iPhone真機以及運行Xcode電腦本身的架構。
(1)iPhone模擬器
目前iPhone模擬器架構分為兩類:
*iPhone5及以下版本的模擬器的架構是i386;
*iPhone5以上(不包括iPhone5)版本的模擬器的架構是x86_64;
(2)iPhone真機
iPhone真機的架構有armv7,armv7s和arm64;
(3)OSX
OSX的架構是x86_64;
由以上可知,我們需要為armv7,armv7s,arm64,i386,iPhone模擬器x86_64以及電腦x86_64的靜態庫。
2、編譯器選擇
編譯器應設定為Xcode內建的編譯器。修改編譯器的方法是:用文字編輯器開啟需要修改的config檔案,例如poco/build/config/iPhone,將原來的CC與CXX修改為Xcode內建的編譯器的路徑,例如:
CC =/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CXX =/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
在目前的Xcode中,C語言用clang編譯器,在Xcode中的路徑:/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
在目前的Xcode中,C++語言用clang++,在Xcode中的路徑:/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++;
一般來說,在POCO的配置的編譯指令碼中都不需要我們手動設定編譯器,指令碼命令會自己找到對應的編譯器。
3、編譯靜態庫
(1)官網下載原始碼:http://pocoproject.org/download/index.html
(2)把下載下來的原始碼解壓到案頭;
(3)開啟終端,進入原始碼檔案,針對不同的平台架構運行下面的命令:
1)armv7:
./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/armv7
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 install
2)armv7s
./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/armv7s
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7s install
3) arm64
./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/arm64
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv64 install
4) i386
./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/i386
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=i386 install
5) iPhoneSimulator-x86_64
./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/iPhoneSimulator-x84_64
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=x86_64 install
6)Darwin64
./configure --config=Darwin64-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"使用者名稱"/Desktop/Xcode-poco/Darwin64
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=x86_64 install
說明:
*--config 配置編譯指令碼,由於Xcode的C和C++編譯器是clang和clang++,因此選擇iPhone-clang-libc++指令碼;
*--no-tests和--no-samples 表示不編譯tests檔案和samples檔案
*--omit 在這裡面配置自己不需要的庫檔案
*--include-path 用來配置依賴資訊,在這裡,由於Crypto和NetSSL_OpenSSL模組依賴於openSSL,因此需要配置openSSL的路徑
*--static 表示建立靜態庫檔案
*--prefix 配置編譯好的庫檔案的存放位置
*IPHONE_SDK_VERSION_MIN 設定支援的iPhone的SDK的最低版本
*POCO_TARGET_OSARCH 設定平台的架構資訊
4、製作通用庫檔案
(1)製作通用庫
這樣我們就得到了各個架構的多個庫檔案,為了使用方便,我們可以製作通用庫檔案,可以利用Xcode的lipo命令來製作,其格式如下:
lipo -create 需要合并的檔案 -output 產生的目標檔案;
例如,需要將armv7/lib/libPocoData.a與arm64/lib/libPocoData.a合并為iOS/lib/libPocoData.a使用下面的命令:
lipo -create armv7/lib/libPocoData.a arm64/lib/libPocoData.a -output iOS/lib/libPocoData.a
注意:由於Darwin64的架構和iPhoneSimulator-x86_64是相通的架構,因此不能將他們合并在一起。
(2)查看庫資訊
可以通過:
lipo -info 需要查看的庫檔案
來查看庫檔案所支援的架構,例如需要查看libPocoData.a所支援的架構,可以使用下面的命令:
lipo -info libPocoData.a
iOS——為Xcode編譯POCO C++靜態庫