一、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