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

时间:2010-05-13 06:31:01

标签: android-ndk dlopen

我正在研究Android应用程序,其中我使用JNI作为本机c代码。 我在Android 2.0版本和ndkr3上构建此应用程序,它工作正常。

现在,当我更改了android 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 个答案:

答案 0 :(得分:7)

这个错误几乎总是说“找不到库”,这可能有很多原因。令人讨厌的是,在大多数情况下,它不是缺少的库,而是其他东西。我偶然发现的原因:

    目录中显然缺少
  • 库(显然),
  • 缺少与您的库动态链接的库
  • 您的库使用的设备/模拟器上的系统库版本与您在编译时链接的系统库版本不同(缺少符号等)

我已经描述了一种方法,当我解决库在模拟器上工作正常并且无法在Nexus One上加载的问题时,该方法对我有用,也许这会对您有所帮助:http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html