2012-09-29 49 views
0

我的代碼在編譯器的優化中遇到了一些問題,我想看看我的C++文件的臨時彙編代碼。如何配置android.mk文件?如何將生成的C或C++源文件轉換爲NDK的臨時程序集r8b

如果我使用

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過濾器?可以舉個例子嗎?

回答

0

ndk-bulid透明地運行使與其所有參數。所以,你可以按如下方式使用它:

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

...對於你想調查的任何C文件。甚至可以在命令行上指定多個目標。

+0

OH ~~~年!我添加cmd到eclipse C++ builder config.it的作品,但如何將它寫入android.mk? – cutxyz

+0

我找到了問題,我的代碼是C++ src,我在android.mk中使用LOCAL_CPPFLAGS:= -S,它可以生成所有臨時彙編代碼,但它仍然會報告。對LOCAL_FILTER_ASM有一些想法?如何使用關鍵字? obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.o:文件格式無法識別;視爲鏈接器腳本 ld.exe:./ obj/local/armeabi-v7a/objs-debug/sunred/SunRedVersion.o:1:語法錯誤 collect2:ld返回1退出狀態 make:*** [obj/local/armeabi-v7a/libsunred.so]錯誤1 – cutxyz

+0

myasmfilter的用途不同。有關更多詳細信息,請參閱docs/ANDROID-MK.TXT中的LOCAL_FILTER_ASM說明。這對於某些類型的混淆任務可能很有用。你爲什麼要改變你的Android.mk文件來完成這樣的任務?當需要特定的彙編文件時,使用特殊參數從命令行手動運行ndk-build會更自然。 –

相關問題