问题:我需要将gnutls移植到Android中以便在共享库中使用(称为库A)我正在使用我的Android应用程序。使用静态gnutls库的共享库有文本重定位
我已经试过什么:我已经修改了make file为openconnect来生成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如此的文件有一个版本(例如libgnutls.so.3.0)和Android不支持版本化的库。
具体问题:我该怎么做:1.将gnutls作为静态库而不需要文本重定位或者2.将它构建为没有soname的共享库?
编辑:我看到相同的question问在openconnect邮件列表上,但没有清楚的方法如何“先修复本地代码中的TEXTREL”。
我看到其他的答案像这样question和this问题与文本重定位的问题,但没有帮助,因为我使用的是最新的NDK构建和传递PIC标志已经
的可能的复制[libavcodec.so:具有文本重](http://stackoverflow.com/questions/32346402/libavcodec-so-has-text-relocations) –
我不认为它是重复的,因为我使用最新的NDK构建并传递-fPIC标志来构建位置独立代码 – Nonos
它真的和@RichardCritten提到的问题一样,请看一看在[本页](http://android-developers.blogspot.ru/2016/06/android-changes-for-ndk-developers.html)的“文本重定位(API 23以后实施)”部分,尽管接受对这个问题的回答只是一个解决方法,真正的事情是修复这个库,但这是特定于库的(从你有四个组合的事实开始)和依赖不知道你用来建立它的选项。 –