在Linux下交叉編譯生成iOS工具鏈的指導手冊


1.前言
  公司要求在Linux系統上實現交叉編譯並動態下發Android和iOS的靜態庫或者動態庫,而其中最為關鍵的就是Android NDK和iOS工具鏈的生成。由於Android的實現起來相對容易,這里重點講述iOS端生成工具鏈的實現過程。 下面的操作全部都是在Macbook Pro上完成的

2.所需資源
   2.2 Ubuntu(16.04及以上版本)( https://www.ubuntu.com/download/desktop
  2.3 LLVM / Clang(> = 5.0)( http://releases.llvm.org/download.html#5.0.0
  2.4 openssl( https://github.com/openssl/openssl
  2.5 automake( http://ftp.gnu.org/gnu/automake/
  2.6 autogen( http://ftp.gnu.org/gnu/autogen/
  2.7 libtool( http://ftp.gnu.org/gnu/libtool/
  2.8 autoconf( http://ftp.gnu.org/gnu/autoconf/
2.9 libssl-dev( https://pkgs.org/download/libssl-dev
2.12 cmake( https://cmake.org/download/

3,資源配置和安裝
3.1 VWware Fusion 10和Ubuntu的安裝方法
3.2 LLVM / Clang的安裝方法
3.2.1:下載LLVM,Clang,Compiler-rt(任選),Clang-tools-extra(任選)源碼並解壓.LLVM解壓后的文件名改為llvm,Clang解壓后的文件名改為clang,編譯器RT解壓后的文件名改為編譯-RT,鏘工具,額外的解壓后的文件名改為鐺工具,額外
3.2.2:把clang放入llvm / tools /目錄下,把compiler-rt放入llvm / projects /目錄下,把clang-tools-extra放入llvm / tools / clang / tools /目錄下
3.2.3:返回到llvm的同級目錄,mkdir llvmbuild(文件名自己取,合理即可)
3.2.4:cd llvmbuild,然后執行 cmake ../llvm -DLLVM_ENABLE_ASSERTIONS = OFF -DCMAKE_BUILD_TYPE = RELEASE

3.2.5:3.2.4執行結束后,執行make -jN(其中N為你的虛擬機設置的處理器內核數,如下圖所示)



如上圖,我為我的虛擬機設置了1個處理器內核,所以我應該寫make -j1
3.2.6:3.2.5執行完成成功后,執行sudo make install,到此llvm,clang的安裝已經完畢
3.3安裝openssl
3.3.1官方給出的方法
3.3.1.1解壓文件
tar -xf openssl-1.0.1g.tar.gz(建議下載最新的版本)
3.3.1.2配置
./config --prefix = / usr / local / openssl --openssldir = / usr / local / openssl
3.3.1.3編譯
使
3.3.1.4安裝
sudo make install
3.3.1.5設置環境變量
sudo gedit〜/ .bashrc,添加export PATH = / usr / local / openssl / bin:$ PATH,保存並推出。最后執行source〜/ .bashrc使環境變量生效。
3.3.2建議使用的安裝方法
3.3.2.1直接使用sudo apt-get install openssl指令安裝
3.4安裝automake
3.4.1建議直接使用sudo apt-get install automake指令安裝
3.5安裝autogen
3.5.1建議直接使用sudo apt-get install autogen指令安裝
3.6安裝libtool
3.6.1建議直接使用sudo apt-get install libtool指令安裝
3.7安裝autoconf
3.7.1建議直接使用sudo apt-get install autoconf指令安裝
3.8安裝libssl-dev
3.8.1建議直接使用sudo apt-get install libssl-dev指令安裝
3.9安裝python
3.9.1建議直接使用sudo apt-get install python指令安裝
3.10 cctools-port
3.10.1直接解壓,無需其他操作
3.11安裝cmake
3.11.1下載源碼后解壓
3.11.2 cd文件名,執行./bootstrap指令
3.11.3 make -jN(此處的N根據你分配的虛擬機的處理器內核數而定)
3.11.4前面都沒問題之后,執行sudo make install,都完成后你可以執行cmake --version來驗證是否安裝成功
3.12 iOS SDK打包步驟(在此我是利用Xcode9.1,打包iOS11.1SDK的。如果需要打包iOS8,iOS9,iOS10等SDK,下面的方法同樣適用, 注意下面的tmp是我們臨時創建的路徑
3.12.1:SDK = $(ls -l /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs | grep“ - > iPhoneOS.sdk”| head -n1 | awk'{print $ 9 }“)
3.12.2:cp -r /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/tmp/ $ SDK 1> / dev / null
3.12.3:cp -r /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tmp/ $ SDK / usr / include / c ++ 1> / dev / null
3.12.4:pushd / tmp
3.12.5:tar -cvzf $ SDK.tar.gz $ SDK(至此我們需要對應版本的iOS SDK已經打包完成)
3.12.6:rm -rf $ SDK
3.12.7:mv $ SDK.tar.gz〜
3.12.8:popd (至此我們在將要生成iOS工具鏈前的准備工作已經全部完成)

4.生成的iOS工具鏈(在此生成的支持的ARMv7,armv7s的工具鏈,我用的是iOS9.3sdk)
4.1生成arm64工具鏈
4.1.1 cd cctools-port
4.1.2執行IPHONEOS_DEPLOYMENT_TARGET = 8.0 usage_examples / ios_toolchain / build.sh〜/ iPhoneOS11.1.sdk.tar.gz arm64
4.1.3 制作工具鏈成功后會提示*** all done ***,此時cctools-port / usage_examples / ios_toolchain /下的目標就是我們要的工具鏈( 至此arm64的工具鏈已經生成)
4.1.4進入/ usr / local,我們創建一個文件,命名為iOS-arm64,然后返回到cctools-port /目錄,執行sudo mv usage_examples / ios_toolchain / target / usr / local / iOS-arm64
4.1.5執行sudo cp /usr/local/iOS-arm64/target/lib/libtapi.so / usr / lib /
4.1.6執行export PATH = $ PATH:/ usr / local / iOS-arm64 / bin
4.1.7驗證我們的工具鏈是否可以使用(下面的圖片很重要)


4.1.7.1 cd cctools-port-master / usage-examples / ios_toolchain / target /
4.1.7.2 mkdir src(創建文件src)
4.1.7.3 vim test.c(創建一個.c文件)
4.1.7.4 ../bin/arm-apple-darwin11-clang -xc -c test.c(編譯.c文件,生成.o文件)
4.1.7.5 ../bin/arm-apple-darwin11-ar cr libtest.a test.o(把.o文件編譯成.a庫,我取靜態庫的名字為libtest.a)
4.1.7.6如果你順利的走到這一步的話,恭喜你,你距離成功0.0000001米,下面就是把test.c和libtest.a文件復制出來,在你的Xcode上驗證我們用iOS -arm64工具鏈生成的靜態庫,能否正常使用。

4.2生成支持armv7,armv7s,x86_64的工具鏈的方法基本同上


備注:如有任何問題可以私聊我,聯系方式QQ:786452470手機:15137162459   github


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com