2012-09-29 10 views
0

임시 어셈블리에 C 또는 C++ 소스 파일을 생성하는 방법 내 코드가 컴파일러의 최적화에 문제가 있습니다. 내 C++ 파일의 임시 어셈블리 코드를보고 싶습니다. android.mk 파일을 설정하는 방법?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 

그것은 그것을 밖으로는 어셈블리 코드, 아니 anyother 파일을 찾을 수 있습니다
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 ~~~ 년! 내가 C++ 빌더 config.it 일식에 cmd를 추가하지만 어떻게 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를 명령 줄에서 수동으로 실행하는 것이 훨씬 자연 스럽습니다. –