可能性の重複:
How do you get assembler output from C/C++ source in gcc?分解
私は素朴な疑問を持っています。
私は、Androidアプリケーションのために書かれたネイティブのC++コードをいくつか持っています。
Eclipseでプロジェクトをコンパイルするときに、GCCコンパイラがどのようなアセンブリコードを生成するかはわかりますか?
可能性の重複:
How do you get assembler output from C/C++ source in gcc?分解
私は素朴な疑問を持っています。
私は、Androidアプリケーションのために書かれたネイティブのC++コードをいくつか持っています。
Eclipseでプロジェクトをコンパイルするときに、GCCコンパイラがどのようなアセンブリコードを生成するかはわかりますか?
複数の方法で実行できます。
Android.mk
のLOCAL_CFLAGS
に-Sフラグを追加します。その後、run ndk-build
。しかし、これは最初のファイルで失敗するので、後のファイルでアセンブラコードを取得することはありません。arm-linux-androideabi-gcc -S file.cpp
を必要なファイルのコマンドラインから手動で呼び出します。さらに、正しいインクルード定義を渡す必要があるかもしれません。 ndk-build V=1
を実行して、使用するコマンドラインを正確に確認してください。arm-linux-androideabi-objdump -d libYourLibrary.so >disasm.txt
を実行してください。これにより、1つの.cppファイルだけでなく、ライブラリ全体が分解されます。ありがとう。 リンク処理に失敗したと言ったように、#1は私のためには機能しません。 #2の場合、gcc -sオプションを試しましたが、正しいインクルード定義を与える方法はわかりません。 NDKビルドの-Vオプションは有効と認識されません。 #3の場合、オブジェクトの.oファイルにobjdumpを使用する方法を見つけました。 これは正常に動作しており、対応する.cppファイルの行番号を表示するために追加の "-l"オプションを使用します。さて、ダンプファイルにはすべての.cpp行のアセンブラコードが含まれていますが、いくつかの行は複数回繰り返されます。これは、これらの行に他の関数を呼び出すことですか? 答えてください。 – revolutionary
いくつかの出力例: D:\開発\ワークスペース\ Quake3 \ Quake3/JNI /エンジン/ frustum.cpp:253 20: MOVS \t R3、#2 D:\開発\ワークスペース\ Quake3 \ Quake3 /jni/engine/frustum.cpp:251 22: STR \t R1、[SP、#24] 24: LDR \t R2、[R 2、#8] 26: STR \t r2、[sp、#20] 28:\t 6a40 \tldr \t r0、[r0、#36] \t; 0x24 D:¥Development¥Workspace¥Quake3¥Quake3/jni/engine/frustum。CPP:256 2A: MOVS \t R2、0# C:\開発\ワークスペース\ Quake3 \ Quake3/JNI /エンジン/ frustum.cpp:\t R2、[SP、#4] D STR :253 2e:\t 930b \t str \t r3、[sp、#44] \t; 0x2c 30:\t 1c06 \t \t r6、r0、#0 – revolutionary
私の素敵な人を助けてください – revolutionary
こんにちはブライアン、 これはAndroidのNDKのコンテキストでは異なる質問です。私はcygwinとEclipseのセットアップを介してGCCコンパイラを使用しています。 それでは、私のプロジェクトで.cファイルとC++ファイルをコンパイルするためにmakefileを使っているcygwinのGCCコンパイラに余分なパラメータを渡すべきかどうかはわかりません。 あなたはそのことを手がかりに教えてください。 – revolutionary