Eclipse c++ 编写JNI心得
1.Eclispe C++中必须创建C++工程,C工程不行。
2.在工程的properties的C/C++ Build-->Settings-->Includes中添加:
(1)."C:\Program Files\Java\jdk1.6.0_25\include"
(2)."C:\Program Files\Java\jdk1.6.0_25\include\win32"
3.生成的dll放到C:\windows\System32下,或放到项目目录的src、bin的同一级目录。
4.如果不出意外会出现如下错误:
java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()
解决方法:
这个错误是 在这个dll里找不到方法的声明,(搞了一下午害我差点装VC了,还借用到了dll查看工具)
网上说是@符号的问题 ,解决方法是用gcc 编译的时候指定参数
第1种方法:
gcc -Wl,--kill-at -shared -o jnihello.dll Native.c
这种方法生成不带@的函数声明
第2种方法:
gcc -Wl,--add-stdcall-alias -shared -o jnihello22.dll Native.c
这种方法会生成2个函数声明,一个是带@的 一个是不带@的。
第3种方法:
在你的本地方法的头文件中中的函数前面加上下划线,比如以前是
JNIEXPORT void JNICALL Java_TestNative_Hello (JNIEnv * , jobject );
现在改成
JNIEXPORT void JNICALL _Java_TestNative_Hello (JNIEnv * , jobject );
同时你的实现的cpp文件或者c文件里的函数头也要一致 前面有下划线。
如果你需要查看dll的导出函数声明可以用以下2个工具
1: dllexp
2:Anywhere PE Viewer