Mac下编译iOS OpenSSL库 支持arm64,armv7,x86_64

iOS WebRTC使用的boringSSL库,而大多数业务方APP使用的是OpenSSL库,为了避免符号冲突,我们需要用OpenSSL来替换WebRTC中的boringSSL。首先就需要先编译出OpenSSL库。

获取OpenSSL源码

https://www.openssl.org/source/old/
当前WebRTC最新分支为M85,里面使用的OpenSSL v1.1.0,从上面的连接里下载1.1.0I版本。并解压。

openssl.png

创建四个文件夹,分别为x86_64,arm64,armv7,armv7s,用于保存生成对应的openssl库。
image.png

编译armv7

1.进入openssl-1.1.0l文件夹,设置编译路径,将编译后产生的文件导向armv7文件夹
$ ./Configure iphoneos-cross --prefix=/Users/wanglongbin/Desktop/armv7 
2.修改Makefile文件

打开Makefile文件,搜索CC,找到"CC= $(CROSS_COMPILE)cc",修改为

CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7

在下面添加下面两行:

CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
CROSS_SDK=iPhoneOS13.2.sdk

我目前使用的xcode版本为12,CROSS_SDK=iPhoneSimulator13.2.sdk这里可以根据自己目录/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs填写

最终修改后的Makefile文件如下:


image.png
3.编译

在openssl-1.1.0l文件夹中执行make命令。等待。

4.安装库

执行make install。将上面生成的库安装到先前设置的armv7文件夹中,结果如下


image.png

include:是我们需要的头文件
lib:里面的libssl.a和libcrypto.a是我们需要的两个.a库

5.查看生成的.a库架构

使用lipo -info 查看生成的.a库架构


image.png

到这里armv7架构的OpenSSL库就编译完成了。
同理armv7s是一样的,只是将第二步的CC= ...... -arch armv7 改为 CC= ...... -arch armv7s。
arm64 也是一样,改为CC= ...... -arch arm64.
x86_64略有不同,因为是模拟器,编译器不同。

编译x86_64

1.进入openssl-1.1.0l文件夹,设置编译路径,将编译后产生的文件导向x86_64文件夹

$ ./Configure iphoneos-cross --prefix=/Users/wanglongbin/Desktop/x86_64  -no-asm 

--prefix:编译生成文件的存储路径
-no-asm:i386采用的不是arm指令集
2.修改Makefile文件
打开Makefile文件,搜索CC,找到"CC= $(CROSS_COMPILE)cc",修改为

CC= /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang

在下面添加下面两行:

CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
CROSS_SDK=iPhoneSimulator13.2.sdk

最终修改后的Makefile文件如下:

image.png

后面就和armv7一样了。

将几种架构的.a库合并

使用lipo -create xxx/armv7.a xxx/armv7s.a xxx/arm64.a xxx/x86_64.a -output xxx/libssl.a

同理合并libcrypto.a

你可能感兴趣的:(Mac下编译iOS OpenSSL库 支持arm64,armv7,x86_64)