My Androidアプリケーション(ネイティブライブラリを使用)でこの警告を印刷Android 4.4:
リンカーmylib.soにはテキストの再配置があります。これはメモリの浪費であり、セキュリティ上のリスクです。修正してください。
それが何であり、それを修正する方法についてのアイデアを持っていますか?おかげで、
これは https://code.google.com/p/Android/issues/detail?id=232 で言及されている2つのndk-gccバグの結果であるように思われます。
そして、ndk-r8cの時点で修正されていると述べました。
問題のあるライブラリのチェックは最近追加されたようです。
注:リンクのURLを非表示にするためにこの投稿を編集しないでくださいしないでください。宛先は信頼できるものであるため、明示的です。
その他の注意NDKバージョンの変更は、警告がアプリケーションのコードによるものである場合にのみ修正されます。警告が代わりにlibdvmなどのシステムコンポーネントにある場合、効果はありません。これはシステムの更新によってのみ修正できます。
ライブラリ内のコードを独立した位置にする必要があります... add -fpic
または -fPIC
あなたのLOCALC_FLAGS
をAndroid.mkに追加し、テキストの再配置を含む静的ライブラリまたは共有ライブラリに対してリンクしていないことを確認する必要もあります。それらを実行し、再コンパイルできる場合は、上記のフラグのいずれかを使用します。
要するに、_-fpic
_フラグまたは_-fPIC
_フラグのいずれかを使用してライブラリをコンパイルする必要があります。ここで、[〜#〜] pic [〜#〜]は Position Independent Code の略語です。
より長い答えは、あなたのyourlib.soはGoogle Androidこの_Dynamic Array Tag
_エントリが予期しないELFファイルの標準。最良の場合、ライブラリは引き続き実行されますが、それでもエラーであり、将来のAOSバージョンではおそらく実行が許可されません。
DT_TEXTREL 0x16 (22)
ライブラリの内容を確認するには、次の行に沿って何かを使用します。
_# readelf --wide -S yourlib.so
There are 37 section headers, starting at offset 0x40:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 0000000000000000 002400 068f80 00 AX 0 0 16
[ 2] .rodata PROGBITS 0000000000000000 06b380 05ad00 00 WA 0 0 32
...
[16] .rela.text RELA 0000000000000000 26b8e8 023040 18 14 1 8
...
[36] .rela.debug_frame RELA 0000000000000000 25a608 0112e0 18 14 27 8
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
_
_DT entry
_の詳細については、トピックの 私の広範な回答 を参照してください。適切な動的ライブラリの作成方法の詳細については、 これは必読です です。
アプリケーションでも同じエラーが発生しました。アプリケーションは、ヘッダーファイルのすべての機能を実装していないネイティブライブラリを使用するネイティブデーモンを使用していました。必要な実装をネイティブライブラリに追加すると、すべてが機能しました。
あなたがまったく同じ問題を抱えているかどうかはわかりませんが、おそらくあなたのネイティブ側に何らかの不一致があることを意味します。