JNI java.lang.UnsatisfiedLinkError
来源:互联网 发布:爱淘宝1元口令 编辑:程序博客网 时间:2024/04/29 04:14
最近要用到JNI所以先练下手,因为项目是要在linux环境下开发,但是我自己的机子上环境还不全,所以就先用WINDOWS来测试了,其实原理和linux是差不多的。
myeclipse中安装了CDT8.0环境,配合MinGW编译器
按照网上的例子写个helloWorld了,就是这么个helloWorld 害我搞一下午。
错误1: java.lang.Unsatisfie.lang.UnsatisfiedLinkError no XXXXX in java.library.path
这个错误一般是找不到dll文件
执行下这个 可以看看 System.out.println(System.getProperty("java.library.path")); 其实就是我们设置的path 环境变量里的东西或者有其他系统的设置。(在windows cmd下 输入path 或者 set 都可以看)。看了这个以后你就知道这个dll或者so文件放哪里他是可以找到了,当然最简单的放这个java文件所在的目录了或者他上层目录,一般是和java src目录同层目录就好了,你看下java.library.path 中有个点号(.) 就表明是当前工作目录的意思,所以肯定在工程目录下有个位置。这个错误一般比较好解决。
错误2: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
- jni java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError
- JNI编程 java.lang.UnsatisfiedLinkError
- JNI 中 java.lang.unsatisfiedLinkError 的错误
- JNI异常:java.lang.UnsatisfiedLinkError-已解决
- JNI调用 java.lang.UnsatisfiedLinkError 异常
- java.lang.UnsatisfiedLinkError(JNI) signature
- java.lang.UnsatisfiedLinkError: Can't load library from JNI code
- Android调用jni时出现java.lang.UnsatisfiedLinkError
- Android调用jni时出现java.lang.UnsatisfiedLinkError
- JNI java.lang.UnsatisfiedLinkError 的一些常见错误
- Android jni库加载错误:java.lang.UnsatisfiedLinkError
- java.lang.UnsatisfiedLinkError: Couldn't load hello-jni from loader
- 二维指针 与 一维指针
- VMware Server运行CentOS报Guest operating system 'centos' is not supported
- 正则表达式30分钟入门教程
- 第七周第三个任务 星号图
- java.lang.OutOfMemoryError: Java heap space 解决方法
- JNI java.lang.UnsatisfiedLinkError
- 七夕恋歌
- VB记录集参数
- PS修改图片上文字的几种方法 图+文
- 我的星号图作业
- linux Kill多个进程
- 求四个数中的最大值
- 进入后台之后程序还可以执行
- haxe实现jquery(1)