2024年1月22日发(作者:)

Mac下编译OpenSSL库

参考博客:/kmyhy/article/details/6534067

1、下载OpenSSL源代码库:/source/

当前(2014.10.21)最新版是openssl-1.0.0j。

下载后解压,将openssl-1.0.0j目录解压放在合适的地方。

本文档中,该目录放在系统桌面位置:/Users/ekijun/Desktop/openssl-1.0.1j。

如果您也是把目录放在桌面,把上述的ekijun换成您系统的

2、打开终端Terminal:

1)先在桌面/Users/ekijun/Desktop/(可以是其他地方,此处是为了方便)新建一个openssllibs文件夹(任意名字)用于保存生成的静态库:

-> mkdir openssllibs

2)进入/Users/ekijun/Desktop/openssl-1.0.1j/目录,在其下新建立3个子目录分别用于保存arm7、arm7s、i386架构的静态库:

-> cd openssl-1.0.1j

-> mkdir arm7 arm7s i386

3) 编译i386库(用于iPhone模拟器)

① 执行/Users/ekijun/Desktop/openssl-1.0.1j/目录下的configure(等号右边是保存i386静态库的目录路径):

-> ./configure BSD-generic32 --openssldir=/Users/ekijun/openssl-1.0.0j/i386

② 编辑openssl-1.0.1j/目录下的makefile文件,找到:

CC= gcc

CFLAG= „

替换为:

CC=

/Applications//Contents/Developer/Toolchains/chain/

usr/bin/clang -arch i386

CFLAG= -DOPENSSL_THREADS -pthread -D_THREAD_SAFE

-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -O3

-fomit-frame-pointer -Wall -isysroot

/Applications//Contents/Developer/Platforms/rm/Developer/SDKs/

③进行编译:

-> make

-> make install

如若编译无误,可以看到i386/lib/目录下 libcrypto.a 和 libssl.a 生成。

4) 编译arm7库(用于arm7架构的iOS使用)

① 先将先前编译好的i386库移到桌面的/openssllibs/:

-> mv i386 ../openssllibs

② 清除上次编译配置:

-> make clean

③ 再次执行/Users/ekijun/Desktop/openssl-1.0.1j/目录下的configure(等号右边是保存arm7静态库的目录路径),重新生成新的编译配置:

-> ./configure BSD-generic32 --openssldir=/Users/ekijun/openssl-1.0.0j/arm7

④ 重新编辑openssl-1.0.1j/目录下的makefile文件,找到:

CC= gcc

CFLAG= „

替换为:

CC=

/Applications//Contents/Developer/Toolchains/chain/usr/bin/clang -arch armv7

CFLAG= -DOPENSSL_THREADS -pthread -D_THREAD_SAFE

-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -O3

-fomit-frame-pointer -Wall -isysroot

/Applications//Contents/Developer/Platforms/rm/Developer/SDKs/

⑤进行编译:

-> make

-> make install

如若编译无误,可以看到arm7/lib/目录下 libcrypto.a 和 libssl.a 生成。

5)仿照步骤4)编译arm7s的静态库(用于arm7s架构的iOS使用)

,其中步骤④改为:

CC= gcc

CFLAG= „

替换为:

CC=

/Applications//Contents/Developer/Toolchains/chain/usr/bin/clang -arch armv7s

CFLAG= -DOPENSSL_THREADS -pthread -D_THREAD_SAFE

-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -O3

-fomit-frame-pointer -Wall -isysroot

/Applications//Contents/Developer/Platforms/rm/Developer/SDKs/

编译结果移到openssllibs目录:

-> mv arm7s ../openssllibs

6)制作“通用”静态库

“通用”静态库是一个“多架构”文件,它是多个单一架构静态库的融合。

制作“通用”静态库需要使用 Mac OS X 的 lipo 命令(具体请参考 Mac

OS X 手册)。

合并 libcrypto.a 和 libssl.a库(-create后为已编译的三个架构下的静态库路径,-output后为合并库保存路径)

->lipo

-create ../openssllibs/i386/lib/libcrypto.a ../openssllibs/arm7/lib/libcrypto.a ../opensslibs/arm7s/lib/libcrypto.a -output ../openssllibs/libcrypto.a

->lipo

-create ../openssllibs/i386/lib/libssl.a ../openssllibs/arm7/lib/libssl.a ../openssllibs/arm7s/lib/libssl.a -output ../openssllibs/libssl.a