android java.lang.UnsatisfiedLinkError: 分析及解决方法
2013-07-22 10:22
369 查看
产生此类异常主要有两种原因:
一, jni还没有编译 是一边编译一边用的
这要分两种情况:
第一种是UnsatisfiedlinkError:dll名称。说明dll没有放到合适的位置。对于Android开发,我们一般把so放在 libs目录下,但是还是会出现这个错误。根本原因System.loadLibrary函数会加载你指定的so,该so中需要链接的所有符号都需要能够链接到,如果有一个链接不成功,那么整个so也会加载失败。仔细检查so中需要的所有符号,确保其存在且在正确的位置上。
第二种是UnsatisfiedlinkError:方法名称。说明dll已经成功加载,但是方法名字错了。这个错误最最常见而且基本的解决方法是:仔细对比你的native 方法的原型确保与javah生成的原型一致。在Java端修改native方法名称一定要记得更新c/c++端的函数名称,这是造成此类错误最常见的原因。
二,是jni已经编译过 直接用别人编译好的so库
你建的项目放loadlibrary()的类的包名要和原项目编译jni时loadlibrary()所在的类名应该一致 ,因为jni好像是根据java包名来命名的,所以改成一致的名字 就OK了
一, jni还没有编译 是一边编译一边用的
这要分两种情况:
第一种是UnsatisfiedlinkError:dll名称。说明dll没有放到合适的位置。对于Android开发,我们一般把so放在 libs目录下,但是还是会出现这个错误。根本原因System.loadLibrary函数会加载你指定的so,该so中需要链接的所有符号都需要能够链接到,如果有一个链接不成功,那么整个so也会加载失败。仔细检查so中需要的所有符号,确保其存在且在正确的位置上。
第二种是UnsatisfiedlinkError:方法名称。说明dll已经成功加载,但是方法名字错了。这个错误最最常见而且基本的解决方法是:仔细对比你的native 方法的原型确保与javah生成的原型一致。在Java端修改native方法名称一定要记得更新c/c++端的函数名称,这是造成此类错误最常见的原因。
二,是jni已经编译过 直接用别人编译好的so库
你建的项目放loadlibrary()的类的包名要和原项目编译jni时loadlibrary()所在的类名应该一致 ,因为jni好像是根据java包名来命名的,所以改成一致的名字 就OK了
相关文章推荐
- android java.lang.UnsatisfiedLinkError: 分析及解决方法
- android studio加载 so文件以及出错。android java.lang.UnsatisfiedLinkError: 分析及解决方法
- Android工程出现 java.lang.NoClassDefFoundError错误解决方法
- 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法
- [置顶] Android开发之viewpager导报错误解决方法:错误代码 Caused by: java.lang.ClassNotFoundException: Didn't find class
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- android BroadcastReceiver遇到 java.lang.IllegalAccessException解决方法
- 编译android遇到java虚拟机堆内存不够的问题 java.lang.OutOfMemoryError: GC overhead limit exceeded 解决方法
- androidPN java.lang.NoClassDefFoundError: org.androidpn.client.解决方法
- Android 加载图片内存溢出解决方法 (java.lang.outOfMemoryError:....)
- Android Eclipse java.lang.NoClassDefFoundError:android.support.v4.content.ContextCompat解决方法
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法
- 出现java.lang.UnsupportedClassVersionError: Bad version number in .class file问题的解决方法分析
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- android2.x的桌面项目程序在android4.0上运行后出现 java.lang.NoClassDefFoundError错误 解决方法
- [Android]java.lang.ClassNotFoundException解决方法
- Android调用GSon时java.lang.NoClassDefFoundError: com.google.gson.GsonBuilder错误解决方法
- [Android]类似java.lang.IllegalStateException: Expected异常的解决方法