下載OpenSSL源碼:https://www.openssl.org/source/
-
進(jìn)入
openssl
目錄淌实,創(chuàng)建存儲(chǔ)openssl編譯后的靜態(tài)庫(kù)文件夾# 用于存儲(chǔ)不同架構(gòu)下缓溅,使用openssl編譯后的靜態(tài)資源文件 $ mkdir openssl_arm64 openssl_armv7 openssl_armv7s openssl_i386 openssl_lib
編譯 armv7 (armv7、armv7s樱报、arm64)架構(gòu)庫(kù)
-
生成配置文件
$ ./Configure iphoneos-cross --prefix=/Users/xxx/openssl-1.1.0c/openssl_armv7
--prefix=
后的參數(shù)為編譯生成文件的存儲(chǔ)路徑 -
需改配置文件
執(zhí)行完步驟1之后息罗,可以發(fā)現(xiàn)
openssl-x.x.x
目錄下生成了一些配置文件芋齿,文本編輯器打開(kāi)Makefile
文件,修改配置:-
設(shè)置編譯器
搜索
CC= $(CROSS_COMPILE)cc
替換為CC= /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7
其中
/Applications/.../clang
為編譯器路徑侍匙,
-arch armv7
為本次編譯的指令集(即:armv7氮惯、armv7s、arm64等)-
設(shè)置sdk路徑
在
CC= $(CROSS_COMPILE)cc
的下一行想暗,我們可以發(fā)現(xiàn)CFLAGS
的參數(shù)設(shè)置CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"$(OPENSSLDIR)\"" -DENGINESDIR="\"$(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
其中
-isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK)
參數(shù)為sdk路徑妇汗,添加路徑參數(shù):# sdk上層路徑 CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer # sdk文件 CROSS_SDK=iPhoneOS10.1.sdk # 源配置,不需要改動(dòng) CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"$(OPENSSLDIR)\"" -DENGINESDIR="\"$(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
【注】 sdk的實(shí)際路徑可以通過(guò)Xcode顯示包內(nèi)容進(jìn)行查找
-
-
編譯openssl
-
make
$ make
終端執(zhí)行
make
命令说莫,進(jìn)行編譯 -
make install
執(zhí)行完步驟i后铛纬,openssl.x.x.x
目錄下,生成了libcrypto.a
唬滑、libssl.a
等文件告唆。查看我們步驟1設(shè)置的路徑下棺弊,依然空空如也。
別著急擒悬,我們繼續(xù)執(zhí)行:$ make install
如果執(zhí)行成功模她,我們就可以在設(shè)置的目錄下查看到我們所需要的文件了
-
-
清理編譯配置
編譯過(guò)程中會(huì)產(chǎn)生一些垃圾文件,當(dāng)我們最終編譯成功后懂牧,依然會(huì)存在侈净。這時(shí)候就需要我們及時(shí)清理掉,為下個(gè)版本的編譯做好準(zhǔn)備僧凤。
$ make clean
編譯 i386(i386畜侦、x86_64)
-
生成配置文件
$ ./Configure iphoneos-cross --prefix=/Users/xxx/openssl-1.1.0c/openssl_i386 -no-asm
--prefix=
后的參數(shù)為編譯生成文件的存儲(chǔ)路徑
-no-asm
:i386采用的不是arm指令集,生成配置文件時(shí)躯保,需添加-no-asm
參數(shù)旋膳,否則無(wú)法make成功 -
需改配置文件
執(zhí)行完步驟1之后,可以發(fā)現(xiàn)
openssl-x.x.x
目錄下生成了一些配置文件途事,文本編輯器打開(kāi)Makefile
文件验懊,修改配置:-
設(shè)置編譯器
搜索
CC= $(CROSS_COMPILE)cc
替換為CC= /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386
其中
/Applications/.../clang
為編譯器路徑,
-arch i386
修改為對(duì)應(yīng)的指令集-
設(shè)置sdk路徑
在
CC= $(CROSS_COMPILE)cc
的下一行尸变,我們可以發(fā)現(xiàn)CFLAGS
的參數(shù)設(shè)置CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"$(OPENSSLDIR)\"" -DENGINESDIR="\"$(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
其中
-isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK)
參數(shù)為sdk路徑义图,添加路徑為:# sdk上層路徑 CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer # sdk文件 CROSS_SDK=iPhoneSimulator10.1.sdk # 源配置,不需要改動(dòng) CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSLDIR="\"$(OPENSSLDIR)\"" -DENGINESDIR="\"$(ENGINESDIR)\"" -O3 -D_REENTRANT -isysroot $(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
【注】此處的sdk版本應(yīng)該選擇模擬器版本
-
-
編譯openssl
$ make
$ make install
-
清理編譯配置
$ make clean
合并成通用庫(kù)
-
合并
libssl.a
$ lipo -create openssl_arm64/lib/libssl.a openssl_armv7/lib/libssl.a openssl_armv7s/lib/libssl.a openssl_i386/lib/libssl.a openssl_x86_64/lib/libssl.a -output openssl_lib/libssl.a
-
合并
libcrypto.a
$ lipo -create openssl_arm64/lib/libcrypto.a openssl_armv7/lib/libcrypto.a openssl_armv7s/lib/libcrypto.a openssl_i386/lib/libcrypto.a openssl_x86_64/lib/libcrypto.a -output openssl_lib/libcrypto.a
-
查看合并庫(kù)的架構(gòu)信息
$ lipo -info libcrypto.a $ lipo -info libssl.a
最終生成的通用庫(kù)
其中openssl頭文件召烂,可以任意拷貝某一架構(gòu)下生成庫(kù)中的頭文件碱工。
e.g.
openssl_armv7/include/openssl
我只是想簡(jiǎn)單的加個(gè)密啊,需要這么麻煩嗎??別著急奏夫,這里為大家推薦兩個(gè)自動(dòng)化編譯腳本《iOS編譯OpenSSL靜態(tài)庫(kù)(使用腳本自動(dòng)編譯)》
參考資料