如何使用NDK r8b将C或C ++源文件生成到临时程序集中

时间:2012-09-29 05:29:36

标签: android gcc android-ndk makefile

我的代码在编译器的优化中有一些问题,我想看到我的c ++文件的临时汇编代码。如何配置android.mk文件?

如果我使用

LOCAL_CFLAGS := -S

编译错误!并输出:

f:/codes/eclipse/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe:./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.o: file format not recognized; treating as linker script
f:/codes/eclipse/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe:./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.o:1: syntax error
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libsunred.so] Error 1

并且不会生成任何汇编代码。

如果我使用

myasmfilter :=  $OBJS_DIR/SunRedVersion.S.original $OBJS_DIR/SunRedVersion.S $OBJS_DIR/SunRedVersion.o

    LOCAL_FILTER_ASM := myasmfilter

它出来了

AsmFilter      : sunred <= SunRedVersion.s

myasmfilter ./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.s ./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.filtered.s
process_begin: CreateProcess(NULL, myasmfilter ./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.s ./obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.filtered.s, ...) failed.
make (e=2): 系统找不到指定的文件。(system can't find the file)

make: *** [obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.filtered.s] Error 2

它可以找到汇编代码,没有任何其他文件。如果我更改了其他cpp文件,它仍会输出第一个make文件的汇编代码。

有人知道怎么写 LOCAL_FILTER_ASM过滤器?能举个例子吗?

1 个答案:

答案 0 :(得分:0)

ndk-bulid 透明地运行 make 及其所有参数。因此,您可以按如下方式使用它:

ndk-build obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.o LOCAL_CFLAGS=-S V=1

...对于您要调查的任何C文件。甚至可以在命令行中指定多个目标。