使用eclipse+DevC++完成JNI调用

最近忙着完成一个简易的词法分析器,由于要求主体程序使用java,而词法分析使用的flex只能使用c,所以出现了使用JNI的需求。这个过程当然很容易,但是由于很久没做,导致手法生疏,出现了各种各样的问题,在百度上着实费了点时间,为了避免以后出现同样的问题,这次就姑且做个总结吧。

首先说明一下JNI是什么。JNI是Java Native Interface的缩写,作用就是使本来与平台无关的Java变的可以使用本地的函数,例如调用操作系统的API,主要还是针对c/c++的。

操作步骤:

1.使用eclipse新建工程,对于需要调用本地函数完成的功能,只创建函数原型,加上native关键字,如public native int add(int a,int b);无需实现,

接着函数原型使用如下语句:

static{
        System.loadLibrary("testJNI");
    }
我在Demo中写的测试java类如下:

package main;

public class Test {
	public native int add(int a,int b);
	static{
		System.loadLibrary("testJNI");
	}
}

还有一个主函数所在的类,那个就无所谓了。注意红色部分为第三部生成的dll文件名。

2.使用javah命令,这一步比较麻烦。无法使用IDE完成(我是不知道的,如果有人知道请告诉我),来到生成的class文件所在的bin目录,然后使用javah -jni 文件名,本人在这里遇到了一个小问题,由于我安装了新版本的jdk,在eclipse中使用的也是新版本,可是环境变量中设置的路径还没改,所以使用命令行时出现了错误,修正之后没问题了。操作之后会出现一个.h文件,名称为   包名_类名.h

3.然后打开devc++,新建一个dll工程,导入.h文件,新建一个c文件,在其中将.h文件引入,并将其中的函数实现。然后编译连接,就会生成一个.dll文件。本人在这一步遇到了两个问题,一个是找不到jni.h,这个问题只要把jdk安装目录下的include文件夹中的jni.h文件以及include\win32目录下的jawt_md.h和jni_md.h文件考入devc++安装目录下的include文件夹即可解决;第二个问题是连接错误,对于这个问题,本人先安装了mingw,这个在sourceforge可以找到,然后在Devc++中添加mingw的库,再设置其味优先查找即可。具体步骤为:

1)在Devc++中打开“工具->编译选项->目录->库”

2)新增mingw中的lib,然后将其位置上移

3)重新编译即可

4.将生成的dll文件导入eclipse的工程中,直接编译运行即可完成



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值