2012-05-08 79 views
-3

可能重複:
How do you get assembler output from C/C++ source in gcc?的Android NDK拆卸代碼

我有一個簡單的問題。

我有一個Android應用程序寫入一些本地C++代碼。

有什麼辦法,我可以看到的是我的GCC編譯器生成了什麼彙編代碼,當我編譯我的Eclipse項目?

+0

嗨,Brian, 這是一個不同的問題,因爲它是在Android的NDK環境中。我通過cygwin和eclipse安裝程序使用GCC編譯器。 因此,它並不清楚我應該如何額外的參數傳遞到cygwin的GCC編譯器,其是使用makefile在我的項目編譯.c和C++文件.. 讓我知道,如果您有任何線索,這樣做是 – revolutionary

回答

8

你可以用多種方式做到這一點。

  1. 在您的Android.mk中將-S添加到LOCAL_CFLAGS。然後run ndk-build。但是這會在第一個文件上失敗,所以你不會在後面的文件上得到彙編代碼。
  2. 在需要的文件上從命令行手動調用arm-linux-androideabi-gcc -S file.cpp。此外,您可能需要傳遞正確的包含定義。運行ndk-build V=1看到什麼命令行,它使用
  3. 運行正常建設得到共享庫(.so文件)。並運行arm-linux-androideabi-objdump -d libYourLibrary.so >disasm.txt。這將消除整個庫,而不僅僅是一個.cpp文件。
+0

感謝馬丁斯。 #1對我來說不起作用,正如您所說的那樣,鏈接過程失敗。 對於#2,我嘗試了gcc -s選項,但不知道如何給正確的include定義? NDK-build上的-V選項不被識別爲有效。 對於#3,我發現如何在我的對象.o文件中使用objdump。 這工作正常,我使用一個額外的「-l」選項來查看相應的.cpp文件的行號。現在,轉儲文件包含每個.cpp行的彙編代碼,但某些行會重複多次。這是在這些行上調用其他函數的原因嗎? 請做答案。 – revolutionary

+0

一些輸出例如: d:\發展\工作區\的Quake3 \的Quake3/JNI /發動機/ frustum.cpp:253 20:\t \t 2302 MOVS \t R3,#2 d:\發展\工作區\的Quake3 \ Quake3的/jni/engine/frustum.cpp:251 22:\t \t 9106 STR \t R1,[SP,#24] 24:\t \t 6892 LDR \t R2,[R2,#8] 26:\t \t 9205 STR \t R 2,[SP,#20] 28:\t \t 6a40 LDR \t R0,[R0,#36] \t; 0x24 D:\ Development \ Workspace \ Quake3 \ Quake3/jni/engine/frustum。CPP:256 2A:\t \t 2200 MOVS \t R2,#0 2C:\t \t 9201 STR \t R2,[SP,#4] d:\發展\工作區\的Quake3 \的Quake3/JNI /發動機/ frustum.cpp :253 2e:\t 930b \t str \t r3,[sp,#44] \t; 0x2c 30:\t 1c06 \t增加\t r6,r0,#0 – revolutionary

+0

請幫我我可愛的人 – revolutionary