news 2026/10/23 5:30:06

【android】android + jni + ndk 遇到的各种错误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【android】android + jni + ndk 遇到的各种错误

最近在忙项目,实在是好久没写博客啦!项目主要是做android的一些移植工作,之前对android开发并无感,也就没怎么涉及,通过这阵子的接触,还是遇到不少的坑,下面就开一篇新的博客,作为对这个项目的一个收获吧。

有些并不是原创,都是看了好多人的博客,有时候看太多了,就不记得是谁的方法了,如果需备注,请私聊LZ

1. could not load library libopencv_java.so

这是跑利用opencv的c++代码,在jni上交叉编译时出的错,交叉编译实在是个神坑,心理不强大者切莫入坑,错误有的实在千奇百怪。而且LZ对eclipse并没有接触很多,Java,android对LZ也都是新的挑战,诶,扯远了,快回来,O(∩_∩)O哈哈~
解决利用NDK开发android版本的opencv应用dlopen failed: could not load library libopencv_java.so

在android +opencv开发时,总是遇到 NDK编译后的JNI的xxx.so模块需要libopencv_java.so但是无法加载libopencv_java.so文件.

解决方法是编辑Android.mk文件,在其中添加OPENCV_INSTALL_MODULES:=on

这样编译的lib时候会自动加载libopencv_java.so文件到libs文件夹下.

问题解决!

2.cbuf = env->GetIntArrayElements(buf, false)

cbuf = env->GetIntArrayElements(buf, false); 编译不过,这个应该是NDK版本的问题,其实LZ也没有仔细去查资料,到底是什么问题,总之把问题解决了就可以了,我在重新配置的时候也遇到了这个问题,无非就是传入的参数和函数可以接收的参数不匹配,那么给它传一个匹配的就好了。
现在改成了:
cbuf = env->GetIntArrayElements(buf, NULL)或者
cbuf = env->GetIntArrayElements(buf, 0);
这样就可以编译通过了

3,作为过来人的建议,慎重直接拿别人封装好的project直接使用,因为别人的project大多数都是编译好.so文件的,如果要自己在别人代码上进行一部分的修改,那么还是最好自己新建一个工程,哪怕再把源码复试过去,不然之前的代码的各种路径设置报错会很崩溃,对于LZ这中android小白,简直会欲哭无泪。

4.jni/G2OBA.cpp:3:20: fatal error: iostream: No such file or directory #include

这个应该是做NDK开发经常出现的一个问题了,就是在javah之后生成对应的头文件后,jni中生成的头文件不认jni.h或者不认一些c++的问题,解决方案是在Application.mk文件中添加以下语句:

APP_STL:=gnustl_static

system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持

stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的

stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的android固件,目前不推荐使用。

gnustl_static - 使用 GNU libstdc++ 作为静态库

默认情况下STLPORT是不支持C++异常处理和RTTI,所以不要出现 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static来支持标准C++的特性,但生成的文件体积会偏大,运行效率会低一些。

支持C++异常处理,在Application.mk中加入 LOCAL_CPPFLAGS += -fexceptions这句,同理支持RTTI,则加入LOCAL_CPPFLAGS += -frtti,这里再次提醒大家,第二条说的使用gnustl静态库,而不是stlport。

强制重新编译 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以强制重新编译STLPort源码,由于一些原因可能自己需要修改下STLPort库,一般普通的开发者无需使用此项

5.textview cannot be resolved to a type 解决方法

之后看了下配套的代码,才知道原来发现缺少了两个包,于是加上

importAndroid.widget.Button;importandroid.widget.TextView;

或者

importandroid.widget.*;

6. Project has no project.properties file! Edit the project properties to set one error
7.The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object.
8.Fix the build path then try building this project Unknown Java Problem

上面3个错误是LZ在调用自己已经配好的project的时候,在另外一个workspace下导入工程是报的错误,其实很尴尬,都不晓得为啥不通过,后来发现工程中少了android.jar,只要选择自己合适的开发平台,把android.jar添加进来就好(≧▽≦)/啦啦啦!

9.error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘void’

这个报错也是LZ头一次见,查了快一个半小时解决方案,首先LZ这个代码已经在QT上运行通过,所以肯定不存在什么代码的原则性问题,最后在一个帖子下面的评论中看到了一个可能,结果一试,果然问题解决,问题的关键在于在重复包含了头文件,这在第三方库使用时特别容易出现这类问题,即头文件重名,导致程序无法编译通过,阿西吧,LZ的一个半小时啊!

10 error: undefined reference to ‘calcImgProjFullR’

这个错误其实都是一个类型的错误,就是在Android.mk文件中你的source文件少写了,或者就是你的头文件没有包含好,这个得看具体少哪些,回头加上这些少的源文件或者头文件就好啦

11.Fatal signal 11(SIGSEGV) at 0x50776a97(code = 2), thread 17256 (example.test)

这是LZ做了一件很愚蠢的事,本来想拿文件的指针的,结果取到了文件的值,文件有八万多个点的坐标,定义的char *,直接超出范围了。。。

最近算法没怎么看,倒是尽做c++第三方库的代码移植了,感觉可以再写一个关于c++ android的移植专题,比如说在linux下都特别容易安装出错的g2o???等LZ忙过这阵再说。。。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 5:29:12

PyTorch nn.Linear深度解析:原理、参数与工程实战

torch.nn.Linear大概是PyTorch里出现频率最高的一行代码之一。你在任何一张网络结构图里都能看到它的身影:MLP里有它,Transformer里的QKV投影是它,分类头是它,回归头也是它,甚至很多老式CNN里的最后几层还是它。这玩意…

作者头像 李华
网站建设 2026/10/23 5:28:42

Django+SSM架构下的台风灾害预警系统:算法设计与工程化实践

做台风灾害预测系统这类项目时,常有人问我:标题里的"DjangoSSM"到底怎么搭?台风路径预测又是怎么算出来的?预警信息如何从模型输出变成防灾人员真正会看的指令?这篇我把自己开发台风预警与灾害评估系统的完整…

作者头像 李华
网站建设 2026/10/23 5:28:41

基于YOLO的鱼病早期筛查系统:从数据集构建到边缘部署实战

先说一个我实际见过的场景:某水产基地的师傅每天巡塘,靠肉眼观察鱼群,等发现白点、烂尾、烂鳃的时候,往往已经进入中后期,处理起来死亡率能冲到三成以上。后来我帮他们搭了一套基于深度学习图像识别的鱼类病害早期筛查…

作者头像 李华
网站建设 2026/10/23 5:28:38

从54到92:论文复现Agent中PDF解析的深度优化实战

做论文复现 AI Agent 的朋友应该都有体会:Agent 跑得顺不顺,往往不取决于模型脑洞有多大,而取决于喂进去的那篇论文 PDF 是不是“干净货”。我最近在模拟项目X的复现流程里,前前后后把 PDF 解析部分调了小两个月,评测分…

作者头像 李华
网站建设 2026/10/23 5:28:22

飞行器飞行原理知识地图:从大气分层到伯努利方程的三层复习法

简介:本资源为《第二章 飞行器飞行原理》配套PPT课件,面向航空航天专业学生及飞行原理初学者,系统梳理飞行器飞行原理的基本概念与核心规律。内容涵盖飞行环境、气体流动基本规律、飞机飞行原理、飞行性能与稳定性操纵性、直升机及航天器飞行…

作者头像 李华
网站建设 2026/10/23 5:28:22

Kali Linux 单引导安装全流程:从镜像刻录到加密 LVM 与 GRUB 避坑指南

简介:这份PDF面向准备学习或部署Kali Linux的初学者与安全爱好者,聚焦单引导场景下的完整安装流程,帮助读者在裸机或虚拟机中顺利搭建渗透测试环境。资源为1个PDF文件,压缩包约2.07MB,内容以图文步骤形式呈现&#xff…

作者头像 李华