相关内容:

GmSSL Linux编译 环境搭建


重要

用编译方法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库编译的更多相关文章

  1. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...

  2. android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)

    android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...

  3. Android库分析工具(崩溃反编译)

    [时间:2016-07] [状态:Open] [关键词:android, 动态库,静态库, 编译,crash,addr2line] 本文主要整理Android编译系统中可用的库分析工作,可作为后续代码 ...

  4. (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译

    转自:http://blog.csdn.net/eqiang8271/article/details/17144411   版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...

  5. Android framework编译出来的jar包classes.jar的位置

    在源码环境下编译 Android framework编译出来的jar包classes.jar的位置  out/target/common/obj/JAVA_LIBRARIES/framework_in ...

  6. Android反编译(三)之重签名

    Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...

  7. 【转】android程序编译过程

    现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...

  8. 转 谈谈android反编译和防止反编译的方法

    谈谈android反编译和防止反编译的方法   android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...

  9. Android 反编译apk 详解

    测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取)  下载          dex2jar(源码文件获取) 下载        jd-gui  (源码查看)  ...

  10. NDK(11)Android.mk编译APK模板

    转自 :  http://hubingforever.blog.163.com/blog/static/1710405792011656434982/ 以下仅是使用Android.mk编译APK程序的 ...

随机推荐

  1. signature

    signature可以翻译成基调.特征标记.签名.

  2. Win10使用打印机0x0000011b错误 如何处理(没有KB5005565补丁如何解决??)

    1.排查问题 win10连接打印机共享错误显示0x0000011b怎么解决?很多用户在更新了windows系统的最新补丁后,突然发现自己打开打印机的时候提示"无法连接到打印机,错误为0x00 ...

  3. 2023年3月1日其它etf大涨,医疗未涨,3月2日会补涨,涨0.5%卖出。

  4. 92、kkfile打印当前页

    使用kkfile预览pdf时,有肯能需要打印其中的某一张.如果pdf中有几百张,那么打印加载就会很慢.打印当前页就不会出现这个问题. 这个是我编译后的,有需要的请联系QQ: 1842988062

  5. Day 22 22.1.2:增量式爬虫 - 场景2的实现

    场景2的实现: 数据指纹 使用详情页的url充当数据指纹即可. 创建爬虫爬虫文件: cd project_name(进入项目目录) scrapy genspider 爬虫文件的名称(自定义一个名字即可 ...

  6. C - Watchmen CodeForces - 651C (使用map例题)

    #include<iostream>#include<map> using namespace std;map<int,int> x;map<int,int& ...

  7. 大规模人脸分类—allgather操作(2)

    腾讯开源人脸识别训练代码TFace 中关于all_gather层的实现如下.接下来解释为什么backward要进行reduce相加操作. https://github.com/Tencent/TFac ...

  8. Spring框架常用依赖配置--供使用时直接复制

    Spring框架常用依赖配置--供使用时直接复制 以下仅为本人工作.学习过程中所接触到的内容,不足之处请多包涵. <properties> <org.springframework. ...

  9. JS篇(005)-== 和 === 的不同

    答案:==是抽象相等运算符,而===是严格相等运算符.==运算符是在进行必要的类型转换后,再比较.===运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回false.使用==时,可能发生 ...

  10. java面经学习002

    2. Java都有哪些map,分别怎么实现的,具体讲 3. 除了LinkedHashMap,你还知道哪些有序map 4. ConcurrentHashMap讲一讲 5. 为什么要有线程池 6. 线程池 ...