GmSSL交叉编译在Android调用

朱小姐很漂亮 2018-05-17 02:15:29
按照参考资料进行NDK交叉编译,能成功编译出动态库和静态库。加入 Android调用测试程序中,运行报错,未能成功调用。猜测是交叉编译过程有误或调用方式有误导致调用失败。主要流程如下:
一、在Ubuntu 16.04 LTS系统上抽取NDK交叉编译环境
目前使用android-ndk-r10d部署交叉编译环境
二、在Ubuntu 16.04 LTS系统上对GmSSL交叉编译
成功编译的方法:
1. 直接执行config文件,对生成的Makefile修改后安装编译
具体流程:
下载gmssl源码并解压,进入目录,执行./config --prefix=/home/zhumin/GmSSL/armeabi-v7a --cross-compile-prefix=$GCC/arm-linux-androideabi- no-asm shared
生成生成Makefile文件;
修改Makefile文件中的配置项,指定交叉编译工具链和输出目标文件等。
make depend && make && make install编译安装并复制到指定目标文件夹。成功输出编译后的头文件及动态库和静态库。
主要参考https://blog.csdn.net/hknaruto/article/details/79277002
2.参考openssl的方法编译
具体流程:
编写setenv-android.sh脚本,指定arm框架、android API等。
下载Makefile.org文件到目录,
chmod a+x setenv-android.sh
. ./setenv-android.sh
perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org
./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine no-saf no-sdf no-skf no-sof no-zuc --openssldir=/usr/local/ssl/$ANDROID_API --prefix=/usr/local/ssl/$ANDROID_API
运行脚本进行编译,成功编译出动态库等文件。
主要参考https://github.com/guanzhi/GmSSL/issues/305
三、对编译出的动态库(.so库)或静态库(.a库)在android工程中调用
将编译后重新生成的include中的头文件复制到cpp目录下,将.so复制到libs目录下(测试使用armeabi-v7a),并在build.gradle中添加配置。
修改CMakeLists.txt配置项。
在native-lib.cpp中编写调用示例,编译运行(真机测试)报错如下:

dlopen("/data/app/com.***.gmsslmobile-1/lib/arm/libnative-lib.so", RTLD_LAZY) failed: dlopen failed: could not load library "libcrypto.so.1.1" needed by "libnative-lib.so"; caused by library "libcrypto.so.1.1" not found

主要参考:https://www.jianshu.com/p/07df7626b4ee

求大佬指导错在哪?
...全文
1263 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-05-28
  • 打赏
  • 举报
回复
libcrypto.so.1.1" 也放到库的目录
bjgxjob 2018-05-28
  • 打赏
  • 举报
回复
SO文件是否存在App\src\main\jniLibs? CMakeLists.txt 指定好SO路径。

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧