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

问题描述:

我在Android应用程序中使用JNI作为本地c代码。 我在android 2.0版本和ndkr3上构建这个应用程序,它工作正常。无法在运行时在Android应用程序中加载库

现在,当我更改了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 

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

  • 库从目录(显然)失踪,
  • 库,动态与库丢失的链接,在设备/模拟器
  • 系统库的版本,你的库使用与编译时链接的那些不同(缺少符号等)

我已经描述了一种方法,它解决了在模拟器上正常工作并且无法正常工作的库的问题加载Nexus One,也许这是无线网络我会帮你:http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html