好吧。。吐槽下,话说最近鸭梨好大。。莫非是事情越来越多。。。望天。。。
1、JNI(java native interface:java本地调用)
书写步骤:编写带有native声明的方法的java类==>使用javac命令编译所编写的java类==>使用javah-jni java类名生成扩展名为h的头文件==>使用C/C++实现本地方法==>·将C/C++编写的文件生成动态连接库==>运行、测试
2、使用eclipse开发JNI(囧。。不知道这个定义是不是错的。。。管他的)
(1)编写native声明的JAVA类
(2)使用javac命令编译所编写的java类
我将JNITest.java复制到了D盘下,并在D盘新建了个文件夹classes,以便将编译好的class文件放入classes文件夹中
然后cmd,进入D盘目录,运行javac JNITest.java(注:有空格),然后回车
在classes这个文件夹中就可以看到编译好的JNITest.class了
(3)Javah生成JNI头文件.h(这个h文件相当于我们在java里面的接口,然后在我们的本地方法里面实现这个方法,也就是说我们在写C/C++程序的时候所使用的方法名必须和这里的一致)
进入D盘的classes文件夹这个目录==>执行javah -classpath bin -d jni com.woody.jni.JNITest ==>这时你可以看到在classes中有了一个com_woody_jni_JNITest.h头文件(com.woody.jni.JNITest是我自己的目录下的类名)
(4)编写本地方法实现方法
这步没啥说的,就是写C文件(注:C文件的include后面最好用"",不用<>,这样才能找到)
(5)生成动态库(dll,<windows>下)
A、生成前准备:
【1】、安装visual c++
【2】、cmd运行cl命令,可能会提示mspdb60.dll找不到,需要自己去下载,下载地址:http://ishare.iask.sina.com.cn/f/6350318.html?from=like
【3】、下载好后将mspdb60.dll复制到C:\Program Files\Microsoft Visual Studio\VC98\Bin目录下,并将bin目录配置到环境变量中,此时再看看cl命令可以运行否
B、cmd下进入C文件所在的目录,执行:cl -IC:\Program?Files\Microsoft?Visual?Studio\VC98\Lib -LD HelloWorldImpl.c -Fehello.dll
(注意:-Fehello.dll,前面的-Fe是一个配置选项,后面的hello是我们之前在头文件写的动态库名称,上面的?是需要代替空格的)
这时你可能会遇到几个问题:
【1】jni.h:no include path set
首先在环境变量--系统变量(注意一定是下面的系统变量中)设置
名:INCLUDE
地址:C:\Program Files\Microsoft Visual Studio\VC98\Include
名:LIB
地址:C:\Program Files\Microsoft Visual Studio\VC98\Lib
【2】经过第一步,又可能会出现这个错误,cannot open include file:'jni.h':
such file or directory
解决方法很简单:只需要将JDK下的include目录中的jni.hj和jni_md.h复制到C:\Program Files\Microsoft Visual Studio\VC98\Include即可
(6)运行测试
进入dll目录中,执行JAVA XXX即可(注意要附带包名类名)
Cannot open
include file: '
jni.
h':
No such file or directory