Problem: Ich muss gnutls zu Android Port in einer gemeinsam genutzten Bibliothek verwendet werden (sagen Bibliothek A) Ich verwende in meiner Android-Anwendung.Gemeinsame Bibliothek mit statischen gnutls Bibliothek hat Textverlagerungen
Was ich versucht habe: ich die make file für Openconnect geändert haben eine .a statische Bibliotheksdatei für gnutls und ihre Abhängigkeiten (libgmp, libnettle und libhogweed) zu erzeugen, habe ich sie statische Bibliotheken bauen in meinem und Android-Projekt verwiesen sie in der gemeinsam genutzten Bibliothek A.-Code baut und installiert in Ordnung, aber auf M + Geräte bekomme ich folgende Fehler zur Laufzeit:
java.lang.UnsatisfiedLinkError: dlopen failed: libA.so: has text relocations
ich habe versucht, die -fPIC
Flagge zu übergeben, wenn die statischen Bibliotheken bauen (.a-Dateien) und wenn ich die libA.so-Datei ohne Erfolg erstelle, sehe ich immer TEXTREL-Einträge in der libA.so-Datei. Ich bin mir sicher, dass dies auf die neuen statischen Bibliotheken zurückzuführen ist, da ich zuvor libA ohne Probleme verwendet habe. Andere Sache, die ich versuchte: versucht gnunls als eine gemeinsame Bibliothek zu bauen, die generierte libA.so hatte jetzt keine Textverlagerungen aber würde immer noch nicht zur Laufzeit laden, weil die gnutls so Dateien eine Version (zB libgnutls.so.3.0) und Android haben unterstützt keine versionierten Bibliotheken.
Spezifische Frage: Wie kann ich entweder: 1.Build gnutls als eine statische Bibliothek ohne Textverlagerungen oder 2. Erstellen Sie es als eine gemeinsame Bibliothek ohne Soname?
Edit: Ich sehe das gleiche question gefragt, auf der openconnect-Mailing-Liste, aber keine klare Möglichkeit, wie "die TEXTRELs im nativen Code zuerst zu beheben".
Ich habe andere Antworten mit Text Verlagerungen wie diese question und this Frage für Probleme gesehen, aber das hat nicht geholfen, da ich die neueste NDK zu bauen und das Bestehen den PIC-Flag bereits
Mögliche Duplikat [libavcodec.so: hat Text Verlagerungen] (http://stackoverflow.com/questions/32346402/libavcodec-so-has-text-relocations) –
Ich glaube nicht, dass es ein Duplikat ist, weil ich das neueste NDK verwende und auch das -fPIC-Flag zur Erstellung eines positionsunabhängigen Codes übergebe. – Nonos
Es ist wirklich das selbe Problem wie von @RichardCritten erwähnt, schau mal im Abschnitt "Text Relocations (Erzwungen seit API 23)" von [dieser Seite] (http://android-developers.blogspot.ru/2016/06/android-changes-for-ndk-developers.html), obwohl das akzeptiert Antwort auf diese Frage ist nur ein Workaround, die eigentliche Sache ist es, die Bibliothek zu reparieren, aber das ist Bibliothek-spezifische (beginnend mit der Tatsache, dass Sie vier von ihnen kombiniert haben) und abhängig dant auf Optionen, die Sie verwenden, um es zu bauen. –