在Linux下交叉编译生成iOS工具链的指导手册

1.前言

 公司要求在Linux系统上实现交叉编译并动态下发Android和iOS的静态库或者动态库,而其中最为关键的就是Android NDK和iOS工具链的生成。由于Android的实现起来相对容易,这里重点讲述iOS端生成工具链的实现过程。下面的操作全部都是在Macbook Pro上完成的

2.所需资源

2.1 VWware Fusion 10(https://my.vmware.com/web/vmware/details?downloadGroup=FUS-1001&productId=688&rPId=18811

  2.2 Ubuntu(16.04及以上版本)(Download Ubuntu Desktop | Download | Ubuntu

  2.3 LLVM / Clang(> = 5.0)(LLVM Download Page

  2.4 openssl(GitHub - openssl/openssl: TLS/SSL and crypto library

  2.5 automake(Index of /gnu/automake

  2.6 autogen(Index of /gnu/autogen

  2.7 libtool(Index of /gnu/libtool

  2.8 autoconf(Index of /gnu/autoconf

2.9 libssl-dev(https://pkgs.org/download/libssl-dev

2.10 python(Download Python | Python.org

2.11 cctools-port(GitHub - tpoechtrager/cctools-port: Apple cctools port for Linux and *BSD

2.12 cmake(Download | CMake

2.13 iOS-SDK(http://resources.airnativeextensions.com/ios/

3,资源配置和安装

3.1 VWware Fusion 10和Ubuntu的安装方法

手把手教大家在mac上用VMWare虚拟机装Ubuntu_M.Siebel的博客-CSDN博客

3.2 LLVM / Clang的安装方法

3.2.1:下载LLVM,锵,编译器-RT(任选),锵工具,额外的(任选)源码并解压.LLVM解压后的文件名改为LLVM,锵解压后的文件名改为铛,编译器RT解压后的文件名改为编译-RT,锵工具,额外的解压后的文件名改为铛工具,额外

3.2.2:把clang放入llvm / tools /目录下,把编译器-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安装蟒蛇

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”| 头-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 制作工具链成功后会提示***全部完成***,此时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执行导出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的的工具链的方法基本同上

备注:如有任何问题可以私聊我,联系方式:lookingforfyf@gmail.com    github

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值