使用eclipse+DevC++完成JNI调用
来源:互联网 发布:linux 查看gcc版本 编辑:程序博客网 时间:2024/06/05 05:05
最近忙着完成一个简易的词法分析器,由于要求主体程序使用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的工程中,直接编译运行即可完成
- 使用eclipse+DevC++完成JNI调用
- 使用eclipse+DevC++完成JNI调用(2)
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- devc++使用
- eclipse调用jni
- GSL+DevC++使用
- Eclipse中使用JNI调用C++ build的dll
- Eclipse环境下使用JNI调用中科院ICTCLAS分词
- Ubuntu下,在Eclipse中使用JNI调用ffmpeg
- java调用jni实例(eclipse)
- 如何完成一个动态链接库,完成JNI调用实例
- 使用jni调用unrar
- DevC++中使用boost简析
- Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- Silverlight窗口控件说明
- datagridview中的空值判断
- BREW内存调试
- 安装java memcached client到maven repository
- HTML文件HEAD内部标记大全
- 使用eclipse+DevC++完成JNI调用
- 在C++中子类继承和调用父类的构造函数方法
- 开发网站结果页面不显示iframe的坑爹现像
- WPF 在TextBox、PasswordBox获得焦点无效解决方案
- java.lang.SecurityException: Prohibited package name: java.demo
- android onSaveInstanceState的使用方法
- Telnet 清屏指令
- TabControl的SelectionChanged事件
- 在横竖屏切换时,遇到问题的解决方案