NDK ネイティブライブラリからTEXTRELの削除
android23以降はTEXTRELを含むネイティブライブラリを読み込めなくなったみたいです。
System.loadLibrary()
にて次の例外が発生します。
UnsatisfiedLinkError
dlopen failed: "libXXX.so" has text relocations
(https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#Text-Relocations-Enforced-for-API-level-23)
私はlibXXX.so本体と、それに含まれる外部ライブラリにTEXTRELが含まれるかを次のコマンドで調べたところ、
その両方でTEXTRELが含まれている事がわかりました。
readelf -a {so PATH} | grep TEXTREL
TEXTRELを削除したいのですがAndroid NDKの場合どのようなオプションを付ければよろしいのでしょうか?
(調べたところ LOCALC_FLAGS := -fPIC をつければいい気はしましたが改善されず…)
今回のようにTEXTRELが含まれるのがコンパイル済みの外部ライブラリ(.so)等の場合、
これらをリンクして生成したライブラリでもTEXTRELがついてしまうのでしょうか?
そうならば、外部ライブラリ自体を再コンパイルしないといけないですか?
AndroidNDKはandroid-ndk-r9dを使用しており、
古いcocosを使っている関係でNDKを新しいものに変えるのは難しいです。
また、アプリ配布先よりtargetSDKを26にするように指示されているため
targetSDKを23以下にするのも対応できません。