如何解析共享库依赖项?

时间:2013-10-12 20:56:36

标签: android android-ndk

我已经构建了两个共享库 - libvpx.so和libmyapp.so。库libmyapp.so依赖于libvpx.so。

我的.apk文件包含标准lib/armeabi目录下的两个库。

在我的java文件中,我有:

class MyVPX {
   static {
     System.LoadLibrary("myapp");
   }
   ...
}

当应用程序运行时,我收到一个不满意的链接错误,即在加载libmyapp.so时找不到libvpx.so。

如果我显式加载libvpx.so,一切都按预期工作:

class MyVPX {
   static {
     System.LoadLibrary("vpx");
     System.LoadLibrary("myapp");
   }
   ...
}

我想知道是否有人知道是什么原因引起的?

1 个答案:

答案 0 :(得分:3)

这是设计的。 Android加载程序只查找/system/lib文件夹中的依赖项,并且无法让它自动加载您的应用程序本机库目录中的库。这有一个固有的安全原因,请参阅"Bionic linker's LD_LIBRARY_PATH limitation"中的android-ndk forum和其他主题。

另一方面,从Java可以从其他应用程序的库目录加载库,甚至可以从SD卡加载库。

相关问题