안드로이드 개발 질문/답변
(글 수 45,052)
제가 개인적으로 필요해서 ffmpeg를 ndk로 컴파일 하는것을 하고있는데요..
윈도우 + 시그윈 + ndk 최신
리눅스 + ndk 최신해도 같은 결과가 나와 질문 드립니다.
ffmpeg를 configure 할때 보면
--disable-asm 이 문장으로 asm기능을 끄고 켜잖아요..
이걸 없애고 asm을 켜면 error가 발생 하는데 도통 이유를 모르겠습니다..
rockplayer을 보면 asm을 사용해서 빌드 하던데.. 이상하게 제가 하면 에러가 나고 안되네요
error내용은 다음과 같습니다..
...
...
Compile Thumb : avcodec <= /home/ksh8281/jni/ffmpeg/libavcodec/cavs.c
/tmp/ccaUZ87B.s Assembler messages:
/tmp/ccaUZ87B.s:2287 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2288 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2292 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2295 Error : Thumb conditional instruction not in IT block
...
configure은 다음것을 참조해서 했습니다..
/tmp/ccaUZ87B.s Assembler messages:
/tmp/ccaUZ87B.s:2287 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2288 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2292 Error : Thumb conditional instruction not in IT block
/tmp/ccaUZ87B.s:2295 Error : Thumb conditional instruction not in IT block
...
configure은 다음것을 참조해서 했습니다..
#!/bin/bash PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0 PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm ./configure --target-os=linux \ --arch=arm \ --enable-version3 \
--disable-stripping \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-encoders \ --disable-muxers \ --disable-devices \ --disable-protocols \ --enable-protocol=file \ --enable-avfilter \ --disable-network \ --disable-mpegaudio-hp \ --disable-avdevice \ --enable-cross-compile \ --cc=$PREBUILT/bin/arm-eabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-eabi- \ --nm=$PREBUILT/bin/arm-eabi-nm \ --extra-cflags="-fPIC -DANDROID" \ --disable-asm \ --enable-neon \ --enable-armv5te \ --extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"
당연한겁니다.
안드로이드 내부에 꼭 필요한 arm어쌤블러를 껏으니 안되는건 당연합니다.
--disable-asm이라는 명령어는 ffmpeg에서 제공하는 모든 어셈블러에 대한 지원을 안하겠단 소리거든요.