`
samyou
  • 浏览: 106262 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eclipse 下实现java JNI 初探

    博客分类:
  • java
阅读更多
/*by sam哥*/
JNI一般用在调用c或者c++的链接库,由于JNI调用时一般需保证名称一致,所以一般做法是先写java函数名再去写c/c++(你nb了就不用这么干了)
我做了个入门级的教程,适合对c/c++懂得不多的童鞋
这个例子里去调用本地的numplus接口实现两整数相加
首先是java的函数申明
//NativeMethod.java,主要用来放jni接口
//以下都用的default package

public class NativeMethod 
{
	public static native int numplus(int a,int b);
}

//Main.java,用来调用测试jni接口
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		System.out.println(NativeMethod.numplus(1, 2));
	}
	
	static{
		System.loadLibrary("jnidll");
	}
	

}

搞完后在eclipse里面会生成NativeMethod.class文件,cmd窗口过去,输入javah -jni NativeMethod生成NativeMethod.h文件,这个就是jni的c++申明了。
注意使用该命令时到class文件根目录下执行,即如果类在/bin/test/jni/MyJni.class,则需要到bin目录下执行javah -jni test.jni.MyJni
为了制作dll,我用的code blocks,比较轻量级不像vc不太好卸载
打开code blocks,新建工程选新建动态库工程

建好后将系统生成的main.cpp和main.h删掉不要(你要也行),将上面javah生成的NativeMethod.h拷贝进来,然后新建NativeMethod.cpp,然后将jdk安装目录下C:\Program Files\Java\jdk1.6.0_05\include的所有.h文件拷贝到工程里,你也可以引用到工程里,但我对codeblocks不熟所以用的比较笨的办法。如图:



然后在NativeMethod.cpp实现该方法,点击左上角的编译,成功后会在workspace里的debug目录下生成dll;
最后将这个dll拷贝到eclipse工程根目录下运行。OK。
我在弄得时候出现了java.lang.UnsatisfiedLinkError,没搞清楚原因,但是找到了解决办法:
这是别的大牛的解决问题的方法:
http://dikar.iteye.com/blog/382701
我用的是在方法名前面加下划线,别说,还真就行了。
好了,eclipse工程和codeblocks工程都发上来,大家一起入门吧。
/*by sam哥*/




  • 大小: 7.2 KB
  • 大小: 25.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics