IOS編譯和安裝GmSSL

最近公司項(xiàng)目需要用到sm2的加簽功能,IOS方面的實(shí)現(xiàn)找了很久也沒(méi)找到,最后用了GmSSL來(lái)實(shí)現(xiàn),GMSSL里面有基于C語(yǔ)言實(shí)現(xiàn)的sm2,這里踩了挺多坑的,所以記錄一下。參考的大神帖:http://blog.cocoachina.com/article/38141
一、下載一個(gè)GmSSL,官網(wǎng):http://gmssl.org/ 也可以去github上下載https://github.com/guanzhi/GmSSL
二、編譯靜態(tài)庫(kù) 在官網(wǎng)的文檔里面有編譯安裝的文檔http://gmssl.org/docs/install.html,但是只支持arm64,amrv7、7s沒(méi)有說(shuō),下面是實(shí)現(xiàn)arm64、armv7、armv7s的編譯和安裝過(guò)程

一、使用終端cd到GmSSL目錄

cd /Users/better/Desktop/GmSSL-2.3.1  //cd到你的GmSSL文件夾
./Congifure  //查看支持的編譯環(huán)境

二、因?yàn)槲覀冃枰玫絀OS的編譯文件,所以我們需要配置 ios64-cross(arm64)、iphoneos-cross(armv7、armv7s)、darwin64-x86_64-cc (x86_64) 、 darwin-i386-cc (i386)

./Configure iphoneos-cross

三、打開(kāi)GmSSL的文件夾,在根目錄里面找到并打開(kāi)Makefile文件(文本編輯就可以打開(kāi)),這里要修改兩處地方
1、搜搜"CC="關(guān)鍵字,把CC=那一行改為CC=/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s (這里需要根據(jù)上面配置的編譯環(huán)境而改變,上面編譯環(huán)境用的是ios64-cross,這里的-arch后面改為arm64,用iphoneos-cross是改為armv7或armv7s)
2、搜索“-isysroot”,把-isysroot后面的
&(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
修改為
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk(-isysroot后面修改前的代碼可能不一樣,直接把-isysroot后面的代碼按上面改就好。我這里的iPhoneOS11.4.sdk是11.4的,需要按你本機(jī)的版本來(lái)改,可以在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs路徑看看你的sdk版本號(hào))

四、打開(kāi)終端,去到GmSSL

make

這里可能會(huì)有報(bào)錯(cuò)


error.png

意思是aes.h映射aes_core.c里面的AES_set_encrypt_key方法,bits參數(shù)的類(lèi)型不一致。我們先找打開(kāi)GmSSL里面的include/openssl/aes.h,搜索AES_set_encrypt_key方法把參數(shù)const unsigned int bits改為int bits后重新make一下就ok了

五、安裝

sudo make install

安裝成功后去GmSSL文件夾里面會(huì)看到兩個(gè)靜態(tài)庫(kù)libcrypto.a、libssl.a

六、合并靜態(tài)庫(kù)
根據(jù)上述5點(diǎn)分別生成arm64、armv7、7s的靜態(tài)庫(kù)(ps:在安裝完第一個(gè)之后/usr/local目錄會(huì)多了一個(gè)share文件夾,是安裝成功后生成的,這個(gè)時(shí)候安裝第二個(gè)需要把這個(gè)share文件夾刪掉,不然會(huì)有報(bào)錯(cuò)信息/usr/local/share/man/man3/hamc.3:,刪掉share文件夾之后重新sudo make install就好了)
在編譯不同的版本的靜態(tài)庫(kù)時(shí),建議編譯完后重新解壓一個(gè)出來(lái)編譯不同的編譯環(huán)境,用make clean命令不夠徹底。

合并命令

lipo -create 路徑/libssl.a  路徑/libssl.a 路徑/libssl.a  -output 輸出路徑/libssl.a

這里的路徑都是絕對(duì)路徑,需要自行設(shè)置
以上就是IOS編譯安裝GmSSL的全部步驟了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容