1

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

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

在我的 java 文件中,我有:

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

运行应用程序时,我收到一个 unsatisfied-link-error,即在加载 libmyapp.so 时未找到 libvpx.so。

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

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

我想知道是否有人知道这是什么原因造成的?

4

1 回答 1

3

这是设计使然。Android loader 仅在/system/lib文件夹中查找依赖项,没有办法让它自动加载应用程序本地库目录中的库。这有一个内在的安全原因,请参阅“仿生链接器的 LD_LIBRARY_PATH 限制”和android-ndk 论坛中的其他主题。

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

于 2013-10-13T10:04:45.440 回答