当前位置:  开发笔记 > Android > 正文

Android NDK:解决动态库版本冲突

如何解决《AndroidNDK:解决动态库版本冲突》经验,为你挑选了0个好方法。

我正在NDK的帮助下制作一个Android应用程序。我正在使用的共享库之一取决于ICU,而我也正试图明确地包含它。

问题是我的设备(显然还有许多其他设备)已预装了旧版本的ICU。这意味着每当我尝试加载共享库时,系统都会尝试加载系统版本,而不是我自己的最新版本。

Android似乎忽略了任何RPATH,否则,RPATH将使库可以在特定位置查找依赖项。据我了解,RPATH本质上是在Android 上/vendor/lib/system/lib在Android 上硬编码的。

我已经看到了一些解决此问题的方法,但是似乎都没有用:

    以依赖性顺序显式加载所有库(包括依赖性)。

尽管ICU库似乎可以正常加载(通过它们的绝对路径),但是cannot locate symbol在尝试加载共享库时仍然出现错误。我已经四次检查(通过nmreadelf),我的(新编译的)ICU .so文件中确实存在缺失的符号。

    SONAME将ICU动态库的更改为特定于项目的内容,而是依赖于它们。

这可能会起作用,但这是最后的结果,因为这将涉及重新编译大量具有非平凡依赖关系的库代码。感觉也更像是黑客。与1相同的原因,库的简单名称更改无法正常工作。–尽管ICU符号已加载,但在从属库尝试访问它们时无法识别它们。

我的问题是向任何曾经尝试过这种方法或比我更了解链接的人:您是如何使其工作的?有没有一种方法可以强迫Android将其广为人知的hotsauce放在一起并实际加载正确的库,或者使用我已经成功加载的符号?

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有