四极管:JNI学习(一:书写步骤及简单在eclipse下实现JNI)

JNI学习(一:书写步骤及简单在eclipse下实现JNI)
2011-03-14 16:12

好吧。。吐槽下,话说最近鸭梨好大。。莫非是事情越来越多。。。望天。。。

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值