完整的使用java调用c++接口教程(包括jni环境的搭建和可能出现的bug解决方法!!)

一、jni环境的搭建

JNI(Java native interface): java和其他语言(C&C++)进行交互的一种接口编码规则。
NDK(Native Development Kit):将其他语言(C&C++)编译成库供Java层调用的开发工具包。

①下载ndk的包

可以去谷歌下载,我的是win10的系统,
在这里提供android-ndk-r22-windows-x86_64的包
链接:https://pan.baidu.com/s/1CKXFLuaokiQIysb9H-lgOA 提取码:23so 复制这段内容后打开百度网盘手机App,操作更方便哦

②将包解压后的路径加入系统环境path中,包不要存的太深,避免路径找不到
我的路径是:F:\workpath\ndk-samples-android-mk

③验证是否安装成功
打开cmd,输入ndk-build,出现以下内容,则成功
在这里插入图片描述
(eclipse的环境配置差不多,也是将jdk的bin目录和jdk下的jre的bin目录加入系统环境变量path中)

二、Java调用c++ dll库的方法

我也是新接触这个,所以参考了*博主:地表最强菜鸡*的一篇博客,使用了其中的代码
博客链接:https://blog.csdn.net/qq_19734597/article/details/89553731?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242

这里详细说一下如何使用java指令生成.h头文件

A 环境配置好后,进入创建好的项目的src目录中(假如有包路径,也要进入包路径直到有创建的.java文件出现)
我的路径为:F:\workspaces\ServerPackage\helloworld\src\com\test\jni
​B 在此目录打开cmd,输入javac -h ./ 类名.class, 对应的头文件会生成在这个类路径中

一定要是类的全路径,否则会失败,这个指令是jdk8以上的才能使用,假如不是,则可以尝试使用 javah -classpath jni 类的全路径.java
在这里插入图片描述

在这里插入图片描述

这里也详细说明一下如何使用VStudio生成dll文件

① 创建项目,我用的是VS2019 
 选择具有导出项的dll,没有找到的话可能是没有下载这部分插件,去VS installer里面下载就行,VS installer是下载vs会自带的 ,项目名最好为JavaCallcpp,因为导入到java里面的时候是以这个为识别名,避免报错

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

② 导入jni.h、jni_md.h和指令生成的.h头文件并且设置相应的路径
  jni.h在jdk的include下,我的路径为E:\java\jdk1.8.0_221\include
  jni_md.h在jdk的include的win32目录下,我的路径为E:\java\jdk1.8.0_221\include\win32
  指令生成的头文件就在指令运行的那个文件目录下,我的路径为F:\workspaces\ServerPackage\helloworld\src\com\test\jni
  将以上三个路径设置到项目中,操作如下:
		1 项目上右击,选择属性 
		2 选择VC++目录后,将三个路径配置到包含目录中 
		3 保存
	需要注意的是:我是64bit的jdk所以我在配置之前还修改了管理器
		1 解决方案上右击,选择配置管理器
		2 选择x64位

在这里插入图片描述
在这里插入图片描述

③ 将代码写完后,右击项目生成,会有dll文件生成,在项目目录下的debug文件夹下有个项目名.dll文件就是生成成功啦!
注意下面这个图片,我的路径是含有x64的,没有修改配置器的话,则直接在Debug目录下就能找到

在这里插入图片描述
接下来就是把.dll文件导入到jre当中

又有个注意的是:假如是eclipse 2020版本的,一定要注意自己的jre路径在哪,有个最最最不要动脑子的简单的确认方法就是,先复制.dll文件进你觉得是对的的jrd路径的bin里面,然后运行Java代码,假如报错就会有路径显示出来,告诉你哪哪哪没找到JAVACALLCPP.dll文件,你复制这个去目录里面找到就行,然后把.dll文件再放进去
我的路径是C:\Users\lenovo\.p2\pool\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.2.v20210201-0955\jre\bin

三、可能会遇见的报错

 Can't load IA 32-bit .dll on a AMD 64-bit platform at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)  ...
- 在使用vs生成时右击项目点击管理配置器修改为x64,生成就会为64位的dll

 前面一串地址:not  to found  dll (这个报错的后面一串英文可能写错了,但是大概意思是这样,我给忘了全部的)
 - dll文件粘贴错了位置,根据报错信息里面的一串地址去找到相对应的地方,重新复制进去,记得把之前导错的dll文件删除,没别的,就是我觉得有个多余的文件有点心烦哈哈哈哈

感觉比较主要的就这两个错误,大家看到console飙红色不要害怕,把报错信息看清楚,再去耐心的找答案,而且不一定一开始找到的参考答案就是对的,配置不一样,解决方法不一样,所以一定要有耐心,嘻嘻嘻(话说得好听,我改得时候也是一边威胁我的电脑一边查资料)

最后的最后,假如你有什么其他的不懂得的地方我们可以一起交流~~~,以上就是完整的java调用c++接口啦!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值