问题:我需要将 gnutls 移植到 Android 以在我的 Android 应用程序中使用的共享库(比如库 A)中使用。
我已经尝试过:我修改了openconnect 的make 文件,为 gnutls 及其依赖项(libgmp、libnettle 和 libhogweed)生成了一个 .a 静态库文件,我使用它们在我的 Android 项目中构建静态库并引用了它们在共享库中 A. 代码构建和安装正常,但在 M+ 设备上,我在运行时收到以下错误:
java.lang.UnsatisfiedLinkError: dlopen failed: libA.so: has text relocations
我-fPIC
在构建静态库(.a 文件)时尝试传递标志,并且在构建 libA.so 文件时没有运气,我总是可以在 libA.so 文件中看到 TEXTREL 条目。我确信这是由于那些新的静态库,因为我之前使用 libA 没有问题。我尝试过的其他事情:尝试将 gnutls 构建为共享库,生成的 libA.so 现在没有文本重定位,但仍然无法在运行时加载,因为 gnutls so 文件有一个版本(例如 libgnutls.so.3.0)而 Android 有不支持版本库。
具体问题:我怎样才能:1.将 gnutls 构建为没有文本重定位的静态库或 2.将其构建为没有 soname 的共享库?
编辑:我在 openconnect 邮件列表上看到了同样的问题,但没有明确的方法来说明如何“首先修复本机代码中的 TEXTREL”。
我已经看到了其他关于文本重定位问题的答案,比如这个问题和这个问题,但这并没有帮助,因为我正在使用最新的 NDK 构建并已经传递了 PIC 标志