首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Eclipse c++ 编撰JNI心得

2012-07-08 
Eclipse c++ 编写JNI心得1.Eclispe C++中必须创建C++工程,C工程不行。2.在工程的properties的C/C++ Build--

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

热点排行