您的位置:首页 > 移动开发 > IOS开发

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

2015-01-28 19:01 465 查看
文章转自:

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

对于x86_64,wiki上有这句话:

x86-64 (also
known as x64, x86_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静态库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐