Android NDK を使用して Java アプリで使用する共有ライブラリを構築しています。を使用readelf
してリリース ビルドによって生成されたファイルを検査するlib/armeabi-v7a/libXXXlib.so
と、ネイティブ C/C++ コードのすべてのシンボル (関数、変数名) が含まれているように見えます。
実際、共有オブジェクト ファイルは、デバッグ ビルドとリリース ビルドで同じように見えます。(フォルダー内の出力の唯一の違いは、およびファイルが作成されlibs
ているかどうかです。) NDK によって設定された最適化を myで上書きしていますが、リリース ビルドがデバッグ シンボルを生成することは期待できません。フラグを含めて、それを行います。gsb.setup
gdbserver
APP_CFLAGS += -O3
Application.mk
-g
SO に関するコメントを見つけました。 libs/ directory"、および別の記述: 「名前がない場合、JNI は Java の関数を見つけることができません。」
ndk-build
で最終的に作成されたものよりもはるかに大きいため、確かにファイルから何かを取り除いていますが、それでもファイル内のすべての関数と変数の名前はそのまま残っているようです。obj/armeabi-v7a/libXXXlib.so
libs
すべての関数の名前は (ネイティブ コードへのエントリ ポイントだけでなく) JNI に必要ですか?
そうでない場合、不要なシンボルを削除するにはどうすればよいですか?