6

Android NDK を使用して Java アプリで使用する共有ライブラリを構築しています。を使用readelfしてリリース ビルドによって生成されたファイルを検査するlib/armeabi-v7a/libXXXlib.soと、ネイティブ C/C++ コードのすべてのシンボル (関数、変数名) が含まれているように見えます。

実際、共有オブジェクト ファイルは、デバッグ ビルドとリリース ビルドで同じように見えます。(フォルダー内の出力の唯一の違いは、およびファイルが作成されlibsているかどうかです。) NDK によって設定された最適化を myで上書きしていますが、リリース ビルドがデバッグ シンボルを生成することは期待できません。フラグを含めて、それを行います。gsb.setupgdbserverAPP_CFLAGS += -O3Application.mk-g

SO に関するコメントを見つけました。 libs/ directory"、および別の記述: 「名前がない場合、JNI は Java の関数を見つけることができません。」

ndk-buildで最終的に作成されたものよりもはるかに大きいため、確かにファイルから何かを取り除いていますが、それでもファイル内のすべての関数と変数の名前はそのまま残っているようです。obj/armeabi-v7a/libXXXlib.solibs

すべての関数の名前は (ネイティブ コードへのエントリ ポイントだけでなく) JNI に必要ですか?

そうでない場合、不要なシンボルを削除するにはどうすればよいですか?

4

1 に答える 1