

android23以降はTEXTRELを含むネイティブライブラリを読み込めなくなったみたいです。  
`System.loadLibrary()`にて次の例外が発生します。

[code]

    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)
    
[/code]

私は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以下にするのも対応できません。


CC BY-SA 4.0
2019-07-18T07:52:08.877
56724
2019-07-18T10:01:15.927
2019-07-18T10:01:15.927
10346
10346
question
android c++
NDK ネイティブライブラリからTEXTRELの削除