美文网首页其它技术点
IOS编译和安装GmSSL

IOS编译和安装GmSSL

作者: BetterG | 来源:发表于2018-07-09 16:18 被阅读34次

    最近公司项目需要用到sm2的加签功能,IOS方面的实现找了很久也没找到,最后用了GmSSL来实现,GMSSL里面有基于C语言实现的sm2,这里踩了挺多坑的,所以记录一下。参考的大神帖:http://blog.cocoachina.com/article/38141
    一、下载一个GmSSL,官网:http://gmssl.org/ 也可以去github上下载https://github.com/guanzhi/GmSSL
    二、编译静态库 在官网的文档里面有编译安装的文档http://gmssl.org/docs/install.html,但是只支持arm64,amrv7、7s没有说,下面是实现arm64、armv7、armv7s的编译和安装过程

    一、使用终端cd到GmSSL目录

    cd /Users/better/Desktop/GmSSL-2.3.1  //cd到你的GmSSL文件夹
    ./Congifure  //查看支持的编译环境
    

    二、因为我们需要用到IOS的编译文件,所以我们需要配置 ios64-cross(arm64)、iphoneos-cross(armv7、armv7s)、darwin64-x86_64-cc (x86_64) 、 darwin-i386-cc (i386)

    ./Configure iphoneos-cross
    

    三、打开GmSSL的文件夹,在根目录里面找到并打开Makefile文件(文本编辑就可以打开),这里要修改两处地方
    1、搜搜"CC="关键字,把CC=那一行改为CC=/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s (这里需要根据上面配置的编译环境而改变,上面编译环境用的是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的,需要按你本机的版本来改,可以在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs路径看看你的sdk版本号)

    四、打开终端,去到GmSSL

    make
    

    这里可能会有报错


    error.png

    意思是aes.h映射aes_core.c里面的AES_set_encrypt_key方法,bits参数的类型不一致。我们先找打开GmSSL里面的include/openssl/aes.h,搜索AES_set_encrypt_key方法把参数const unsigned int bits改为int bits后重新make一下就ok了

    五、安装

    sudo make install
    

    安装成功后去GmSSL文件夹里面会看到两个静态库libcrypto.a、libssl.a

    六、合并静态库
    根据上述5点分别生成arm64、armv7、7s的静态库(ps:在安装完第一个之后/usr/local目录会多了一个share文件夹,是安装成功后生成的,这个时候安装第二个需要把这个share文件夹删掉,不然会有报错信息/usr/local/share/man/man3/hamc.3:,删掉share文件夹之后重新sudo make install就好了)
    在编译不同的版本的静态库时,建议编译完后重新解压一个出来编译不同的编译环境,用make clean命令不够彻底。

    合并命令

    lipo -create 路径/libssl.a  路径/libssl.a 路径/libssl.a  -output 输出路径/libssl.a
    

    这里的路径都是绝对路径,需要自行设置
    以上就是IOS编译安装GmSSL的全部步骤了

    相关文章

      网友评论

      • Mario_ZJ:您好,请问一下生成的libcrypto.a静态库,是不是也需要合并?

      本文标题:IOS编译和安装GmSSL

      本文链接:https://www.haomeiwen.com/subject/mfuzuftx.html