我正在移植大量本机代码和几个相互依赖的库。加载代码失败,因为 Android 链接器仅查找依赖项/system/lib/
并且不在应用程序安装目录中/data/data/com.packagename.nnn/lib
.
作为第一个解决方法,我使用 System.load() 从 Java 加载了所有 .so以正确的依赖顺序。这个解决方案对我来说并不令人满意,主要是因为由于插件架构的原因,库集在每次构建时都会发生变化。此外,用户界面不需要了解太多有关本机库的信息。
我发现 Android 不支持 RPATH 或为应用程序设置 LD_LIBRARY_PATH。我发现的唯一解决方法是使用完全限定的 SONAME 构建库。
然而,一些依赖项是预先构建的。
即使所需的 .so 没有完全限定的 SONAME,是否也可以将完全限定的 NEEDED 标记编译到我自己的库中?
或者是否可以修改现有的 .so 并将其 SONAME 或 NEEDED 替换为完全合格的文件而无需重新编译?
Mozilla Fennec 从 /data/data/package/ 目录下的自定义缓存目录加载一堆共享对象,您可以查看它们的源代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)