Android应用程序中无法在运行时加载库

4

我正在开发一个安卓应用,其中使用了JNI来编写本地C代码。我在安卓2.0版本和ndkr3上构建了这个应用,并且它运行良好。

现在,当我将安卓SDK版本更改为1.5和API版本更改为3时,我遇到了无法打开libtest_demo.so库的问题。

05-13 16:54:23.603: INFO/dalvikvm(1211): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library

我将libtest_demo.so文件放在相同位置/data/data/org.abc.test_demo/lib/libtest_demo.so,但是仍然出现相同的问题。
在我的java文件中,我调用本地库的方式如下:
 System.loadLibrary("abc_jni");
 System.loadLibrary("test_demo");

从logcat中我看到两个库使用了相同的内存地址。

这是logcat输出:

05-13 17:56:15.732: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.732: DEBUG/dalvikvm(9897): Added shared lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.742: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libtest_demo.so 0x437317f8 
05-13 17:56:15.752: INFO/dalvikvm(9897): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library
1个回答

7
这个错误几乎总是显示“找不到库文件”,而导致这一问题的原因有很多。令人烦恼的是,在大多数情况下,问题并非缺少库文件,而是其他原因引起的。我遇到过以下原因:
  • 目录中缺少库文件(显然),
  • 与您的库动态链接的库文件丢失,
  • 设备/模拟器上的系统库版本与编译时链接的库文件不同(缺少符号等)。

我曾经遇到过一个解决错误的方法,当时一个在模拟器上正常运行但在Nexus One上无法加载的库文件。也许这个方法可以帮助你: http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接