编译ios平台的支持arm64和x86_64的通用openssl静态库

文章转自:

ios 编译openssl支持arm64,但对于原文有所修改,并增加了x86_64的编译。

对于x86_64,wiki上有这句话:

x86-64 (also known as x64x86_64 and AMD64) is the 64-bit version of the x86 instruction set

也就是说是64位的x86指令集。可以这样理解armv7 , armv7s对应真机的32位处理器,i386对应模拟器的32位模拟器;arm64对应真机的64位模拟器,x86_64对应模拟器的64位模拟器。


下面是具体的编译步骤:


先下载openssl的源文件的最新版本

http://www.openssl.org/source/


在openssl-1.0.1h目录下创建5个文件夹,分别为arm64,armv7,armv7s,i386 , x86_64。它们分别用于存放指定平台的库文件。


****编译i386平台

打开/openssl-1.0.1h/crypto/ui/ui_openssl.c进行修改,将

static volatile sig_atomic_t intr_signal; 

修改为

static volatile int intr_signal;


打开终端,进入到openssl-1.0.1h目录,输入命令

./configure BSD-generic32 --openssldir=/Users/Kyo/Desktop/openssl-1.0.1h/i386

(/Users/Kyo/Desktop/openssl-1.0.1h/i386为上面创建的i386文件夹路径)


命令完成后,在openssl-1.0.1h目录下会生成很多文件,找到其中的makefile文件并打开,

编辑 makefile 文件,将

CC= gcc

修改为

CC= gcc -arch i386


下一行CFLAG = ......的最后增加

-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk

(将红色部分替换为你自己的sdk路径)


在终端执行命令

make

再接着执行命令

make install


执行完成后,在i386文件夹下将会生成多个文件和文件夹,/lib目录下存放着编译成功的库文件libcrypto.a 和 libssl.a 


****编译其它平台


接着我们需要编译其它平台的库文件,先在终端执行命令make clean 清空之前的配置和缓存(发现执行这个命令并不能完成清空,我的做法是,先保存上面生成的i386的库文件,执行make clean命令,然后删除整个openssl-1.0.1h,重新解压一个openssl-1.0.1h,然后再继续其它平台的库文件编译)


既然是新解压的openssl-1.0.1h,我们需要重新上面的几个步骤,修改ui_openssl.c,执行configure命令,修改makefile文件。

修改makefile跟i386中有所不同,

CC= gcc

修改为

CC= gcc -arch armv7

(其中armv7是指编译armv7平台下的库文件,如果改为arm64,就是编译arm64平台下的库文件)


下一行CFLAG = ......的最后增加

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -miphoneos-version-min=6.0

(i386中的路径是iPhoneSimulator.platform,而其它架构都是iPhoneOS.platform,请注意x86_64是用iPhoneSimulator.platform的sdk)


在终端执行命令

make

再接着执行命令

make install


执行完成后,在armv7文件夹下将会生成多个文件和文件夹,/lib目录下存放着编译成功的库文件libcrypto.a 和 libssl.a


如此重复生成各个平台的库文件后,开始合并操作。


****制作“通用”静态库


执行终端命令合并 libcrypto.a 库(确保终端中的路径正确):


lipo -create  /x86_64/lib/libcrypto.a /i386/lib/libcrypto.a  /armv7/lib/libcrypto.a /armv7s/lib/libcrypto.a /arm64/lib/libcrypto.a -output /libcrypto.a

(红色部分替换为各个.a文件的路径,绿色部分替换为最终合并结果的输出路径)


执行终端命令合并 libssl.a 库(确保终端中的路径正确):

lipo -create /x86_64/lib/libssl.a /i386/lib/libssl.a /armv7/lib/libssl.a /armv7s/lib/libssl.a /arm64/lib/libssl.a -output /libssl.a

跟前面一样,将路径修改为正确路径)


最后附上我的编译结果:ios平台的支持arm64和x86_64的通用openssl静态库




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值