【原创】GmSSL Android库编译
相关内容:
重要
用编译方法2编译出的库,集成到工程之后,发现报 incompatible target错误,各种找不到定义。32位和64位都不行。 如果你也遇到跟我一样的问题。 只能用下面的方法重新编译
编译方法1:
编译环境
- gmssl 2.5.4
- OpenSSL 1.1.0d
- wsl ubuntu 20.04
- ndk-r21e
参考:
NDK开发 - 使用GMSSL库和OpenSSL库的注意点及编译
GmSSL的编译和使用
脚本参考:https://github.com/wangp8895/gmssl-for-android
编译中间出现下面的报警

原因是根据独立工具链(已弃用) 的说明,从r19开始,已弃用独立工具链。可以不用管
由于编译出很多文档,耗时比较长,可能要1-2小时。将编译脚本放到解压后的GmSSL-master同级目录,使用./build-gmssl4android.sh android64-aarch64 启动编译,在你指定的out/libs目录中, 会生成以下文件:

lib包含:

这次终于可以正常使用了。
编译方法2:
编译环境
- wsl ubuntu 20.04
- ndk-r21b
官方给出了一个编译脚本, 可以稍微参考一下,我是没编译通过。
以下为编译脚本, 参考地址
#!/bin/bash
set -ex
# Set directory
CURRENT_PATH=`pwd`
SCRIPTPATH=$CURRENT_PATH/out
export NDK=/mnt/e/Android/android-ndk-r21b
export OPENSSL_DIR=$CURRENT_PATH
# Find the toolchain for your build machine
toolchains_path=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Configure the OpenSSL environment, refer to NOTES.ANDROID in OPENSSL_DIR
# Set compiler clang, instead of gcc by default
CC=clang
# Add toolchains bin directory to PATH
PATH=$toolchains_path/bin:$PATH
# Set the Android API levels
ANDROID_API=21
# Set the target architecture
# Can be android-armeabi, android64-aarch64, android-x86, android-x86 etc
# armeabi-v7a
outdir=arm64-v8a
# android-armeabi
architecture=android64-aarch64
# Create the make file
cd ${OPENSSL_DIR}
./Configure ${architecture} -D__ANDROID_API__=$ANDROID_API no-asm no-unit-test no-serpent
#./config no-ssl2 no-ssl3 no-comp no-hw no-engine \
#--openssldir=$(pwd)/../out/$ANDROID_API \
#--prefix=$(pwd)/../out/$ANDROID_API
# Build
make -j4
# Copy the outputs
OUTPUT_INCLUDE=$SCRIPTPATH/output/include
OUTPUT_LIB=$SCRIPTPATH/output/lib/${outdir}
mkdir -p $OUTPUT_INCLUDE
mkdir -p $OUTPUT_LIB
cp -RL include/openssl $OUTPUT_INCLUDE
cp libcrypto.so $OUTPUT_LIB
cp libcrypto.a $OUTPUT_LIB
cp libssl.so $OUTPUT_LIB
cp libssl.a $OUTPUT_LIB
配置信息:


生成的Makefile中交叉编译配置:

这里我尝试后,编译器和TOOLCHAIN_PATH不设置也能编译成功。在目标目录下会生成include 和lib文件

你可能会遇到的其他问题:
- make发现找不到 asm/types.h

然后发现 sysroot/usr/include下并没有asm目录,只有asm-generic。 我发现在include的arm-linux-androideabi下是存在asm目录的。 所以想法就是将这个目录添加到搜索头文件中。 开始想export CFLAGS进去,但是死活无法生效,尝试几次无果。

最后添加了一个软连接来实现
ln -s $ANDROID_PATH/sysroot/usr/include/arm-linux-androideabi/asm $ANDROID_PATH/sysroot/usr/include/asm
- 错误:
[Makefile.shared:197: link_shlib.linux-shared] Error 1
这里 的方案是设置EX_LIBS为空, 但始终无法生效。 最后通过
make clean
make update
make
来解决的。
参考文档
GmSSL Android 交叉编译 多平台
OpenSSL的编译和使用
在Linux下安装GmSSL
【原创】GmSSL Android库编译的更多相关文章
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...
- android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)
android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...
- Android库分析工具(崩溃反编译)
[时间:2016-07] [状态:Open] [关键词:android, 动态库,静态库, 编译,crash,addr2line] 本文主要整理Android编译系统中可用的库分析工作,可作为后续代码 ...
- (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译
转自:http://blog.csdn.net/eqiang8271/article/details/17144411 版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...
- Android framework编译出来的jar包classes.jar的位置
在源码环境下编译 Android framework编译出来的jar包classes.jar的位置 out/target/common/obj/JAVA_LIBRARIES/framework_in ...
- Android反编译(三)之重签名
Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...
- 【转】android程序编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- 转 谈谈android反编译和防止反编译的方法
谈谈android反编译和防止反编译的方法 android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...
- Android 反编译apk 详解
测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取) 下载 dex2jar(源码文件获取) 下载 jd-gui (源码查看) ...
- NDK(11)Android.mk编译APK模板
转自 : http://hubingforever.blog.163.com/blog/static/1710405792011656434982/ 以下仅是使用Android.mk编译APK程序的 ...
随机推荐
- Vulnhub 靶场 CORROSION: 1
Vulnhub 靶场 CORROSION: 1 前期准备: 靶机地址:https://www.vulnhub.com/entry/corrosion-1,730/ kali攻击机ip:192.168. ...
- ORACLE之自治事务
在创建存储过程时,可以用关键字: PRAGMA AUTONOMOUS_TRANSACTION 创建自治事务. 常用场景: 触发器抛错导致事务回滚,日志的记录需要用自治事务进行记录 代码抛错,导致数据库 ...
- MSDTC突然停用了,后台数据无法更新
由于前台电脑停电突然关机,导致重启后发现MSDTC无法更新数据,重新添加了link,只能查询,更新失败,报错:无活动事务 1.修改host设置,在C:\Windows\System32\drivers ...
- unity shader ide
Shader Languages support for vs Code https://marketplace.visualstudio.com/items?itemName=slevesque.s ...
- python学习之路---基础概念扩展:变量,表达式,算法,语句,函数,模块,字符串
对于学过一点编程语言的人,学习python基础知识不难,基本大同小异 本章是根据一本书来学习python的编程(强烈推荐)来记录学习python中的有意思的总结 Python 基础教程(第三版) ...
- vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么?
vue本身不做事件代理(react将所有事件都委托到document上,然后进行派发) 普通html元素和在组件上挂了.native修饰符的事件.最终EventTarget.addEventListe ...
- wpBullet-20190604
WordPress Plugins/Themes 和 PHP 的静态代码分析工具 Usage: wpbullet.py [-h] [--path PATH] [--enabled ENABLED] [ ...
- [iOS] 对 UItableView 等界面(ClipsToBounds) 同时使用 圆角和阴影
展示内容的界面会被 ClipsToBounds = YES(按边缘剪切),但同时需要圆角和阴影效果. 一个界面,ClipsToBounds = YES 之后,阴影会被剪切,不再展示. 感觉只能使用多个 ...
- [419] C1 Harbingers Of War OpCodez
[419] C1 Harbingers Of War Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 Request ...
- Day11-数组的使用
数组的使用 一.数组的使用 package com.array; public class ArrayDemo03 { public static void main(String[] args) { ...