我正在移植一个具有多个相互依赖的库的大块本地代码。加载代码失败,因为Android链接器仅在/system/lib/
中查找依赖项,并不在应用程序安装目录/data/data/com.packagename.nnn/lib
中查找。
作为第一个解决方法,我使用System.load()从Java加载了所有.so文件,并按正确的依赖关系顺序加载。对我来说,这种解决方案并不令人满意,主要是因为由于插件架构,库的集合在每个构建中都会发生变化。此外,UI不应太了解本地库。
我发现Android不支持RPATH或为应用程序设置LD_LIBRARY_PATH。我找到的唯一解决方法是使用完全限定的SONAME构建库。
但是,其中一些依赖项是预先构建的。
即使所需的.so没有完全限定的SONAME,是否可能在自己的库中编译完全限定的NEEDED标签?
或者,是否可以修改现有的.so并替换其SONAME或NEEDED为完全限定的内容,而无需重新编译?
ndk-depends
)特别加载所需的库 - 新的libicu以这种方式似乎可以正常加载,但即使如此,依赖库似乎仍然找不到它所需的符号。我错过了什么步骤吗? - ephemer