赞
踩
我用的Mac电脑编译,Xcode版本15.2,安卓的NDK版本是android-ndk-r21e。
下载最新的国密SDK源码到本地。
前往Mac系统的AppStore下载安装最新Xcode。
下载NDK到本地,选择一个比较新的版本下载即可,我选择的是android-ndk-r21e-darwin-x86_64.zip。
cd /Users/xxxx/Downloads/GmSSL-master
mkdir build; cd build
下载ios.toolchain.cmake,将ios.toolchain.cmake
文件复制到源码的根目录。
在build目录下执行下面命令
cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DPLATFORM=OS64COMBINED
cmake --build . --config Release
出现如上错误,使用Xcode打开build目录下的GmSSL工程,选择TARGETS–>gmssl–>Build Setting–>Signing配置中设置Development Team,然后重新执行cmake --build . --config Release命令。
编译模拟器动态库:Xcode打开GmSSL工程,cmd+b快捷键编译工程。
编译真机动态库:使用数据线将电脑和手机连接,Xcode打开GmSSL工程选择真机编译,
Debug目录下的libgmssl.3.1.dylib即为动态库,将动态库重新命名为gmssl3.dylib
全局搜索gmssl/,全部替换为空即可
Build Phases创建Copy Files
添加动态库路径
点"+"添加动态库
下载方法查看1.3章节
LOCAL_PATH := $(call my-dir) //获取当前文件路径 include $(CLEAR_VARS) # 编译的源文件列表 LOCAL_SRC_FILES := ../src/version.c \ ../src/debug.c \ ../src/sm4_common.c \ ../src/sm4_enc.c \ ../src/sm4_modes.c \ ../src/sm4_setkey.c \ ../src/sm3.c \ ../src/rand.c \ ../src/http.c \ ../src/sm3_hmac.c \ ../src/sm3_kdf.c \ ../src/sm2_alg.c \ ../src/sm2_key.c \ ../src/sm2_lib.c \ ../src/sm9_alg.c \ ../src/sm9_key.c \ ../src/sm9_lib.c \ ../src/zuc.c \ ../src/zuc_modes.c \ ../src/aes.c \ ../src/aes_modes.c \ ../src/sha256.c \ ../src/sha512.c \ ../src/chacha20.c \ ../src/hash_drbg.c \ ../src/block_cipher.c \ ../src/digest.c \ ../src/hmac.c \ ../src/hkdf.c \ ../src/pbkdf2.c \ ../src/gf128.c \ ../src/gcm.c \ ../src/aead.c \ ../src/pkcs8.c \ ../src/ec.c \ ../src/rsa.c \ ../src/asn1.c \ ../src/hex.c \ ../src/base64.c \ ../src/pem.c \ ../src/x509_alg.c \ ../src/x509_cer.c \ ../src/x509_ext.c \ ../src/x509_req.c \ ../src/x509_crl.c \ ../src/x509_new.c \ ../src/cms.c \ ../src/sdf/sdf.c \ ../src/sdf/sdf_lib.c \ ../src/sdf/sdf_meth.c \ ../src/sdf/sdf_ext.c \ ../src/sdf/sdf_sansec.c \ ../src/skf/skf.c \ ../src/skf/skf_lib.c \ ../src/skf/skf_meth.c \ ../src/skf/skf_ext.c \ ../src/skf/skf_prn.c \ ../src/skf/skf_wisec.c \ ../src/socket.c \ ../src/tls.c \ ../src/tls_ext.c \ ../src/tls_trace.c \ ../src/tlcp.c \ ../src/tls12.c \ ../src/tls13.c \ ../src/file.c \ ../tools/gmssl.c \ ../tools/version.c \ ../tools/sm4.c \ ../tools/sm3.c \ ../tools/sm3hmac.c \ ../tools/sm2keygen.c \ ../tools/sm2sign.c \ ../tools/sm2verify.c \ ../tools/sm2encrypt.c \ ../tools/sm2decrypt.c \ ../tools/sm9setup.c \ ../tools/sm9keygen.c \ ../tools/sm9sign.c \ ../tools/sm9verify.c \ ../tools/sm9encrypt.c \ ../tools/sm9decrypt.c \ ../tools/zuc.c \ ../tools/rand.c \ ../tools/pbkdf2.c \ ../tools/certgen.c \ ../tools/certparse.c \ ../tools/certverify.c \ ../tools/certrevoke.c \ ../tools/reqgen.c \ ../tools/reqparse.c \ ../tools/reqsign.c \ ../tools/crlgen.c \ ../tools/crlget.c \ ../tools/crlparse.c \ ../tools/crlverify.c \ ../tools/cmssign.c \ ../tools/cmsverify.c \ ../tools/cmsencrypt.c \ ../tools/cmsdecrypt.c \ ../tools/cmsparse.c \ ../tools/sdfutil.c \ ../tools/skfutil.c \ ../tools/tlcp_client.c \ ../tools/tlcp_server.c \ ../tools/tls12_client.c \ ../tools/tls12_server.c \ ../tools/tls13_client.c \ ../tools/tls13_server.c \ # 包含的头文件目录 LOCAL_C_INCLUDES := $(LOCAL_PATH)/include # 生成的动态库名称 LOCAL_MODULE := gmssl include $(BUILD_SHARED_LIBRARY)
# APP_ABI 定义了要构建的目标平台,例如 armeabi-v7a、arm64-v8a、x86 和 x86_64
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
# APP_PLATFORM 定义了要针对的 Android 平台版本
APP_PLATFORM := android-21
在GmSSL源码根目录下创建jni目录,NDK编译过程中在jni目录下查询编译描述文件,所以要将Android.mk和Application.mk文件放在jni中。
export PATH=$PATH:/Users/xxxx/Desktop/out/android-ndk-r21e
ndk-build -version
如果有输出Copyright © 1988-2016 Free Software Foundation, Inc.等信息则设置生效。
ndk-build
如果编译过程中弹出<未识别的来源>弹窗,在设置–>隐私与安全性–>安全性中点击允许,然后重新执行编译。
这个问题是在Android.mk文件中LOCAL_C_INCLUDES设置的头文件路径下找不到头文件,解决办法是将头文件目录复制到设置的路径下即可。
解决办法是找到声明方法或者变量的.c文件添加到Android.mk中的LOCAL_SRC_FILES源文件列表中即可。
解决办法是删除Android.mk源文件列表sm4_common.c文件的声明
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。