問題: Android アプリケーションで使用している共有ライブラリ (ライブラリ A など) で使用するために、gnutls を Android に移植する必要があります。
私が試したこと: openconnect のmake ファイルを変更して、gnutls とその依存関係 (libgmp、libnettle、libhogweed) の .a 静的ライブラリ ファイルを生成し、それらを使用して Android プロジェクトで静的ライブラリを構築し、それらを参照しました。共有ライブラリ A. コードは正常にビルドおよびインストールされますが、M+ デバイスでは実行時に次のエラーが発生します。
java.lang.UnsatisfiedLinkError: dlopen failed: libA.so: has text relocations
スタティック ライブラリ (.a ファイル) をビルドするときにフラグを渡そうとしましたが-fPIC
、libA.so ファイルをビルドするときに、libA.so ファイルに常に TEXTREL エントリが表示されます。以前はlibAを問題なく使用していたので、これらの新しい静的ライブラリが原因であると確信しています。私が試した他のこと: gnutls を共有ライブラリとしてビルドしようとしましたが、生成された libA.so にはテキストの再配置がありませんでしたが、gnutls so ファイルにはバージョン (例: libgnutls.so.3.0) があり、Android にはバージョンがあるため、実行時にまだロードに失敗します。バージョン管理されたライブラリをサポートしていません。
具体的な質問: 1. gnutls をテキストの再配置なしで静的ライブラリとしてビルドするか、または 2. soname のない共有ライブラリとしてビルドしますか?
編集: openconnect メーリング リストで同じ質問が寄せられていますが、「最初にネイティブ コードの TEXTREL を修正する」方法について明確な方法はありません。
この質問やこの質問のようなテキストの再配置に関する問題に対する他の回答を見てきましたが、最新の NDK ビルドを使用して PIC フラグを既に渡しているため、それは役に立ちませんでした