一、简介
JNI(java native interface),即java本地接口,来实现java程序与其他语言的交互,实际上就是调用本机已有的动态链接库的代码。这是一个简单的实例,通过java来访问c。
二、实现过程
1.编写相应的Java代码,平台是用eclipse编写还是记事本编写再用javac在命令行编译成字节码都可以,我是用的eclipse编写的,代码如下:
2.保存文件,找到文件的位置,在命令行中用javah命令编译JNItest.java文件,生成交互用的.c文件。
结果:
这是没有选择生成位置,当然你可以用命令-d ..来决定 生成的位置。里面的内容为:
3.在vs或vc编译器中编辑c文件,将dos界面下生成c文件放到工程所在文件夹的位置,然后导入到头文件,此时程序会出现错误,这是就要找到你本机的JDK的include文件夹,把jni.h和jni_md.h放到该工程的文件夹下然后在工程中导入。再把用javah生成的.h中的#include<jni.h>改为#include”jni.h”。此时程序就没错了。
C代码:
C工程下加入的头文件:
导入头文件:
4.生成动态库(.dll)
(1)配置工程属性
打开资源试图,选中后右键选择属性,在常规中,选择配置类型中的动态库(.dll),然后确定,如下图:
(2)编译器标题栏选中生成—>配置管理器–>根据自己电脑的位数来配置—>确定
(3)选择标题栏的生成—>生成解决方案
(4)之后你就可以到你c工程文件夹下的x64\Debug文件夹下看到这个.dll文件。
(5)由于java程序运行是在path中寻找路径的,为了让eclipse知道这个动态库的存在,就要将其路径(我的是:F:\C#代码\MyFirstJNI\x64\Debug)加入到环境变量PATH中。
之后就可以在eclipse中运行java程序了。
三、结果如下
四、总结
这是一个java程序调用c的一个简单的JNI应用,在c文件里返回的字符串,通过java调用显示在eclipse中。同时,让我大致了解了JNI的配置及工作原理。为以后学习JNI开了一个好头。
注:
- 所做的分析都是笔者自己的见解,如有不正确还请见谅。
- 另外,如需代码请访问我的Github:https://github.com/Zxnaruto