2012-05-08 50 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