使用cygwin和ndk生成so库供android使用(jni,交叉编译,opencv,neon)

2023-10-27

1,cygwin 安装

参考:

https://www.cnblogs.com/webapplee/p/3774047.html
http://www.docin.com/p-1005446599-f6.html

2,下载ndk和依赖opencv

我下载的版本可供参考:

android-ndk-r14b-windows-x86_64.zip

opencv-3.2.0-android-sdk.7z

可自行百度官网下载。下载解压即可,解压文件路径下面备用。

3,配置cygwin中NDK环境变量方便命令使用

进入cygwin安装目录下home\zx

我的 D:\A_app\cygwin\dir\home\zx下

.bash_profile文件,添加

NDK=/cygdrive/D/A_app/java/ndk14/android-ndk-r14b-windows-x86_64/android-ndk-r14b/build
export NDK

(注意文件编码不要改动,改动后会出现启动符号不识别,具体解决办法,根据错误百度)

出现编码问题:执行dos2unix -n .bash_profile .bash_profile

4,源码及mk配置

找一个目录,建文件夹名字为jni(名字不能改为其他),其中生成的libs和obj文件和jni同一目录下

打开jni文件夹

放编译需要用的代码文件,并创建Android.mk和application.mk

Android.mk内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

#LOCAL_CFLAGS := -g -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8
#LOCAL_CFLAGS := -g -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8
#采用NEON优化技术
#LOCAL_ARM_NEON := true
#LOCAL_CFLAGS := -DHAVE_NEON=1

OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off

OPENCV_LIB_TYPE :=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include D:/L_lib/opencv/opencv-3.2.0-android-sdk/sdk/native/jni/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif

LOCAL_MODULE := faceTest

LOCAL_SRC_FILES := face.cpp \
             other.cpp \

LOCAL_LDLIBS := -lz
LOCAL_LDLIBS +=  -lm -llog

LOCAL_ARM_NEON := true

include $(BUILD_SHARED_LIBRARY)
 

注意:含neon,opencv。(不需要可删去)

 

 

application.mk内容如下:

#APP_ABI := armeabi-v7a
APP_ABI := arm64-v8a armeabi-v7a
#APP_STL := stlport_static
APP_STL := gnustl_static
#APP_STL := stlport_shared
APP_CPPFLAGS := -frtti -fexceptions
APP_CPPFLAGS += -std=c++11 -stdlib=libc++
#APP_CPP_FEATURES := rtti

 

注意:用到c++11特性(不需要可删去)

 

以上工作准备好之后,启动cygwin

输入命令(参考类比):

cd /cygdrive/D/T_mytest/facejni

$NDK/ndk-build

注意:我在facejni创建的jni文件夹

如果程序没有问题,编译即可。

jni技术可以自行百度。我只简要说一下

一般流程:

在java工程里面创建包(注意:创建的包名必须和使用者的包名一致)

创建类(类内接口和dll导出接口声明类似)(注:该类提供给java调用者使用,放在创建的同名包下)

创建java native 类方法(该方法供调用者直接调用)

工程编译

cmd窗口 进入刚建的包父目录下,使用javah命令生成.h文件

利用该.h文件,使用通过jni类型进行c++和java类型转换。具体内容可以百度参考

改类型转换源码和.h文件还有实际的dll文件放到创建的jni目录下,

后面的内容上面已经介绍过,以上为总结内容。

 

 

 

 

 

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

使用cygwin和ndk生成so库供android使用(jni,交叉编译,opencv,neon) 的相关文章

随机推荐

  • gorm自动更新创建时间及更新时间,自动更新时间戳

    平时写代码 总是要处理更新时间和创建时间 要写不少的代码 而且还容易忘记 针对于这个问题研究了一下有没有什么比较好的方式 下面说一下如何摆脱体力劳动 假设场景 需要改分好毕业 CREATE TABLE user id int 11 NOT
  • cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘错误解决方法

    import albumentations as A 报错 cv2 has no attribute gapi wip gst GStreamerPipeline 解决方法 pip3 install user upgrade opencv
  • springboot农场农业技术信息化管理系统java

    本系统采用intellij idea软件开发 项目架构 B S架构 前端技术 Layui Html CSS 后端技术 Java mybatis Springmvc 运行环境 win10 win11 jdk1 8 数据库 mysql5 7 8
  • 关于C++中Eigen库效率提升的思考

    目录 引言 一 什么是Eigen 二 使用步骤 1 引入库 2 建立矩阵 3 基本操作 三 具体的例子 矩阵乘法 1 Eigen库 2 GPU并行计算 总结 可能的方案 引言 在处理矩阵运算上 各种语言都有了自己的处理办法 例如 Pytho
  • m.2接口和nvme区别_m.2 nvme和m.2有区别吗?

    m2接口有两种 一种走sata的 另外一种走pcie 就是nvme 的 走sata的速度跟传统sata接口的没区别 就是接口变成了m2的了 走pcie的 就是我们说的nvme接口是m2的 性能也强了 M 2接口有SATA也有NVMe PCI
  • 【解决】uniapp使用video标签在浏览器调试正常,安卓真机、手机上显示小黑块,无法正常显示

    问题 uniapp中使用video标签展示视频 在浏览器展示正常 但是运行到安卓真机 或者手机上显示小黑块 无法正常显示 示例代码如下
  • Ubuntu目录常见命令

    一 ls 1 ls a 查看隐藏文件 2 ls l 查看详细信息 3 ls h 查看文件的大小 h必须要和 l联合使用 ls l h ls lh 三者联合使用 ls lha 4 ls通配符使用 ls 1 找到1结尾的 代替一个 定义一个匹配
  • C++文件打开方法

    C 文件打开方法 为什么要打开文件 如何打开文件 C和C 都能用的 freopen版 fopen版 只有C 能用的 文件输入输出流 fstream 为什么要打开文件 有时候 我们需要把一些内容保存到文件中 以便后期使用 今天小编就来介绍一下
  • 关于PBFT算法

    PBFT算法 即为实用拜占庭容错算法 主要应用于联盟链中 它的关键技术是一致性协议 1 假设共有f个作恶节点 那么总节点需要大于等于3f 1个 即至少有2f 1个诚实节点 2 一致性协议 由诚实节点共同维护 若主节点的请求得到2f 1个诚实
  • 主流的Web自动化测试工具

    1 什么是自动化 概念 由机器设备代替人工自动完成指定目标的过程 1 1 优点 1 减少人工劳动力 2 提高工作效率 3 产品规格统一标准 4 规模化 批量生产 2 什么是自动化测试 软件测试 校验系统是否满足规定的需求 弄清预期结果与实际
  • elk笔记13--Query DSL

    elk笔记13 Query DSL 1 基础介绍 2 常见查询类型 2 1 Query and filter context 2 2 Compound queries 2 3 Full text queries 2 4 Geo querie
  • leptonica源码编译

    leptonica源码编译 原创作品 转载请说明出处 谢谢 原创作品 转载请说明出处 谢谢 原创作品 转载请说明出处 谢谢 环境软件 a leptonica1 78 0 b cppan c cmake d VS2015 e 操作系统Wind
  • python挖掘时间特征信息,计算日期是当年的第几周、当月的第几周

    需要使用的主要有两个工具包 from datetime import datetime from calendar import monthrange 分别计算当前的日期对应的 所在年份 所在月份 当前月的第几日 星期几 当月的天数 当年的
  • 手机厂商竞相推“新品牌”,想明白了吗?

    2013年 国产智能手机 新品 市场可谓热闹非凡 9月28日 联想发布高端子品牌VIBE 11月20日 金立发布全新互联网品牌INUI 华为也有意将荣耀品牌从华为分离出来 使其成为独立互联网手机品牌 11月17日 OPPO手机副总经理刘作虎
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 2022年网络安全比赛--压缩包文件暴力破解中职组(超详细)

    2022年比赛压缩包文件暴力破解解析 一 竞赛时间 180分钟 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息 将 Telnet 版本信息字
  • Angular学习笔记29:事件绑定

    事件绑定 前面的绑定都是按照 元素到组件的方式 但是在一个页面不可能只是数据展示给用户 而用户对页面没有任何操作 不能进行和页面的交互操作 在与用的交互操作时 怎么才能知道用户进行了怎么样的操作和交互呢 这个时候 就用到了各种事件 如按下键
  • stm32f103c8t6+dht11测量温湿度(单总线协议)

    核心问题 如何根据电路和时序来写程序 接口协议 单总线 意味着一根数据线实现接收和发送 所以相应的GPIO口要设置为2种模式 输入 输出 电路 如果没有在电路中作5k上拉 可以把GPIO模式设置成GPIO Mode IPU实现软件上拉的效果
  • 创建一个有返回值的线程,实现Callable接口

    背景 模拟创建3000条Json格式的数据用于测试 创建定长线程池 启动10个线程 同时 增加模拟数据 记录生成程序的总时间消耗 最后打印在控制台 或输出到目录文件中 1 创建启动方法 读取服务器目录json文件 import java i
  • 使用cygwin和ndk生成so库供android使用(jni,交叉编译,opencv,neon)

    1 cygwin 安装 参考 https www cnblogs com webapplee p 3774047 html http www docin com p 1005446599 f6 html 2 下载ndk和依赖opencv 我