iOS——為Xcode編譯POCO C++靜態庫


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM