Android NDK 编译 三方库记录 及 jni库封装问题

2023-11-19

因工作需求, 要将原先的c++库跨平台编译,在Android上运行, 其依赖了几个第三方库, 也需要一起编译, 在此做个记录

所需工具(centos 系统上完成)

1. cmake 3.15.6

2. ndk: android-ndk-r21e ​​​​NDK 下载  |  Android NDK  |  Android Developershttps://developer.android.google.cn/ndk/downloads

1. Boost库的编译

关于编译android 版本的boost,参见这个开源项目 Boost-for-Android
 

ndk: android-ndk-r21e (stl库只支持 llvm)

export NDK_ROOT=/opt/android-ndk-r21e

./boost-android  --boost=1.69.0 $(NDK_ROOT)

 2. libevent 编译

参考 Make libevent for android_若无的博客-CSDN博客

ndk: android-ndk-r21e

3. thrift c++ 的编译

参考 windows下Android NDK R19 交叉编译 thrift C++ 库(cmake)_10km的专栏-CSDN博客

libthrift 要依赖 boost 库, libthriftnb 依赖 libevent openssl库

ndk: android-ndk-r21e

mkdir android-build && cd android-build

cmake .. -DBOOST_ROOT=/Libs/Boost-for-Android-master/build/out/armeabi-v7a -DBoost_ADDITIONAL_VERSIONS="1.69.0;1.69" -DBoost_NO_SYSTEM_PATHS=ON -DBoost_COMPILER=-clang -DWITH_BOOSTTHREADS=ON -DWITH_C_GLIB=OFF -DWITH_LIBEVENT=ON -DWITH_OPENSSL=ON -DWITH_SHARED_LIB=ON -DWITH_STATIC_LIB=ON -DWITH_JAVA=OFF -DWITH_PYTHON=OFF -DWITH_HASKELL=OFF -DWITH_ZLIB=OFF -DBUILD_COMPILER=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TUTORIALS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER_ARCHITECTURE_ID=ARMEABI-V7A -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH -DCMAKE_TOOLCHAIN_FILE=/opt/android-ndk-r21e/build/cmake/android.toolchain.cmake -DOPENSSL_ROOT_DIR=/Libs/openssl-android/armeabi-v7a -DLIBEVENT_ROOT=/Libs/libevent-2.1.8-stable/out/armeabi-v7a -DANDROID_PLATFORM=26 -DBoost_ARCHITECTURE=-a32 -DANDROID_ABI="armeabi-v7a"

make 

成功后库在lib下

4. cryptopp 编译

官方文档: http://www.cryptopp.com/wiki/Android_(Command_Line)

cryptopp版本 7.0.0

下载: cryptopp/setenv-android.sh at master · weidai11/cryptopp · GitHub

setenv-android.sh 里屏蔽 ANDROID_SDK_ROOT 部分

ndk: android-ndk-r21e

source setenv-android.sh 21 arm64

make -f GNUmakefile-cross static dynamic

make -f GNUmakefile-cross install PREFIX=./android-arm64

 5. Log4cplus 编译

参考 Log4cplus 1.2.0 的 Android 版本从源码到编译、5 步完成、方便快捷!_莺时桃桃的 Debug 日常-CSDN博客

二. jni问题及解决

1. 我的c++库用到了qtcore库, 在启动程序时报qtcore库加载错误, 后来百度后找到解决方法, 项目需要将 qtcore.jar 加到依赖就行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android NDK 编译 三方库记录 及 jni库封装问题 的相关文章

  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 在 Android 中上传文件出现内存不足错误

    我的上传代码如下 String end r n String twoHyphens String boundary try URL url new URL ActionUrl HttpURLConnection con HttpURLCon
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 在 Android 布局 xml 文件中使用字符串格式参数 [重复]

    这个问题在这里已经有答案了 我在 String xml 文件中定义了一个使用格式参数的字符串 即
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • SpringMVC关于get请求传参的问题

    在SpringMVC中 请求GetMapping注解的控制器方法 传参数时 如果直接使用get传递一个body参数过去 后端是不能正确接收的 这儿有一个篇为什么get请求不能正确接收body的解释 HTTP GET 请求可以有 body 吗
  • ROS通信机制~服务通信(server&client)·笔记3

    系列文章目录 ROS开发 ubuntu 笔记 1 嘻 嘻的博客 CSDN博客 ROS通信机制 话题通信 Publisher Subscriber 笔记2 嘻 嘻的博客 CSDN博客 服务通信 概念 以请求响应的方式实现不同节点之间数据交互的
  • MySQL基本SQL语句2(DML)

    目录 前言 一 添加数据 INSERT 1 给指定的字段添加数据 2 给所有的字段添加数据 3 添加多条数据 二 修改数据 UPDATE 修改数据语法 三 删除数据 DELETE 删除数据语法 总结 前言 DML英文全称是Data Mani
  • vue导出Excel和包含echarts的页面导出pdf

    目录 Vue用Export2Excel导出excel单表头和多表头 vue json excel插件实现导出 前端将Blob流文件转为文件导出 vue 导出HTML页面 包含echarts 为PDF Vue用Export2Excel导出ex
  • vmware fusion个人版

    个人免费版虚拟机 不要访问中文网站 以下链接都是英文网站 如果之前将该网站的国家设置成中国 请将其设置回美国后再打开链接 首先注册VMware Fusion Player 账号 并激活 https my vmware com web vmw
  • 目录以及目录下的重要文件

    第1章 mv mv move 移动 remove 移除 类似于windows的剪切 语法格式 mv 参数选项 源文件 目标文件 mv 源文件 新的文件名 root oldboyedu lnb 移动 oldboy下的oldboy txt文件
  • css line-height

    项目中看到 line height 1 所以来总结一下 line height 属性 line height 定义 line height 属性设置行间的距离 行高 line height 不允许使用负值 属性可能的值 值 描述 norma
  • RT-Thread操作系统 AT组件源码分析(以 EC20 为例)

    文章目录 1 AT 组件 1 1 AT 组件调试信息级别设置 1 2 AT 命令打印使能设置 1 3 GPRS 网络注册状态检查 1 4 EC200x 是否能连接外网日志输出 1 5 AT 设备注册过程 1 6 AT 设备类注册过程 1 7
  • win10java jdk安装

    配置环境变量 右击我的电脑 属性 点击Path 新建 添加最后两行到自己的Path环境中 转载链接 https www cnblogs com suni p 8279672 html
  • 求二叉树中两个指定节点的最短距离

    给定一个二叉树 找到该树中两个指定节点间的最短距离 思路 求最近公共祖先节点 然后再求最近公共祖先节点到两个指定节点的路径 再求两个节点的路径之和 const shortestDistance function root p q let l
  • Vue练习题(带解析)

    Vue基础入门 一 填空题 Vue是一套构建 用户界面 的渐进式框架 MVVM主要包含3个部分 分别是Model View和 ViewModel Vue中通过 refs 属性获取相应DOM元素 在进行Vue调试时 通常使用 vue devt
  • Qt实现隐藏按钮功能

    在Qt design界面中添加pushbutton 按钮 选中pushbutton 在右下角有按钮属性相关的修改内容 选中flat 按钮外围边框已消失 此时还差一步 需要修改一下 找到stylesheet 输入以下内容 输入 backgro
  • Go并发异步请求秀动抢票

    继上次python请求秀动接口 这次我将采用性能最佳的Go语言重构 tips 因分享了太多人 有人以此向外获利 所以停止分享 之前采用python异步请求 三次请求购票接口的思路 鉴于秀动app的防护措施愈来愈强 我将采用发挥go语言的协程
  • 实现一个在线抽奖系统,就算是个小白看了也能做出来(附源码)

    在线抽奖系统 1 项目介绍 1 功能介绍 2 开发环境与技术栈 3 项目演示 2 项目准备 1 代码框架 源码 2 数据库设计 3 后端对前端接口的实现 1 用户的登录 注册 注销 2 查询奖项设置 修改抽奖人数 3 新增 修改 删除奖项
  • JavaScript Table行填充

    使用JS脚本操作Table元素 在不同浏览器中操作方法不尽相同 当新建一行之后 IE中可以使用单元格操作来完成单元格的添加 而在FireFox中无法正确通过单元格来操作 而只能使用 td td 来实现 因此 在编写填充函数时 要注意检测浏览
  • 基础算法题——帅到没朋友(唯一性)

    帅到没朋友 当芸芸众生忙着在朋友圈中发照片的时候 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 输入第一行给出一个正整数N 100 是已知朋友圈的个数 随后N行 每行首先给出一个正整数K 1000 为朋友圈中
  • 用TensorFlow.js实现AI换脸 !所以你知道某些网站视频的明星是怎么来的了吗?

    前言 相信很多小伙伴对TensorFlow js早已有所耳闻 它是一个基于JavaScript的深度学习库 可以在Web浏览器中运行深度学习模型 AI换脸是一种基于深度学习的图像处理技术 将一张人脸照片的表情 头发 嘴唇等特征转移到另一张人
  • python遇到can not import xxx错误

    一种不容易被发现的问题是循环引用导致该问题的发生 具体可参考 ImportError cannot import name xxxxxx 的三种类型的解决方法 Activewaste的博客 CSDN博客 cannot import name
  • Android NDK 编译 三方库记录 及 jni库封装问题

    因工作需求 要将原先的c 库跨平台编译 在Android上运行 其依赖了几个第三方库 也需要一起编译 在此做个记录 所需工具 centos 系统上完成 1 cmake 3 15 6 2 ndk android ndk r21e NDK 下载