我已经构建了两个共享库 - 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");
}
...
}
我想知道是否有人知道是什么原因引起的?
答案 0 :(得分:3)
这是设计的。 Android加载程序只查找/system/lib
文件夹中的依赖项,并且无法让它自动加载您的应用程序本机库目录中的库。这有一个固有的安全原因,请参阅"Bionic linker's LD_LIBRARY_PATH limitation"中的android-ndk forum和其他主题。
另一方面,从Java可以从其他应用程序的库目录加载库,甚至可以从SD卡加载库。