在Android上加载具有依赖关系的共享库

时间:2011-08-30 18:22:36

标签: android linker android-ndk shared-libraries

我正在使用几个相互依赖的库移植大量本机代码。加载代码失败,因为Android链接器只查找/system/lib/中的依赖项,而不是/data/data/com.packagename.nnn/lib的应用程序安装目录中的依赖项。

作为第一个解决方法,我使用System.load()以正确的依赖顺序从Java加载所有.so。这个解决方案对我来说并不令人满意,因为由于插件架构,库集从一个版本变为另一个版本。 UI也不需要了解很多关于本机库的信息。

我发现Android不支持RPATH或为应用设置LD_LIBRARY_PATH。我发现的唯一解决方法是使用完全合格的SONAME构建库。

然而,一些依赖项是预先构建的。

  1. 即使所需的.so没有完全合格的SONAME,是否可以将完全合格的NEEDED标签编译到我自己的库中?

  2. 或者是否可以修改现有的.so并将其SONAME或NEEDED替换为完全合格的版本而无需重新编译?

1 个答案:

答案 0 :(得分:0)

Mozilla Fennec从/ data / data / package /目录下的自定义缓存目录加载一堆共享对象,您可以查看它们的来源。