안녕하세요 ^^


두번째 강좌로 configure 과정에 대해 자세히 알아보겠습니다.



5. configure


옵션이 길어서 바로 명령을 입력하면 오류가 나기 쉬우니 파일을 하나 만듭니다.

ffmpeg 폴더에 config.sh 파일을 만들어 아래와 같이 작성합니다.


 export ANDROID_ROOT=/cygdrive/c/my-android-toolchain

./configure --target-os=linux \
--arch=arm \
--enable-cross-compile \
--cc=$ANDROID_ROOT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$ANDROID_ROOT/bin/arm-linux-androideabi- \
--extra-cflags="-marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon" \
--extra-ldflags="-Wl,--fix-cortex-a8" \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-network \
--disable-devices \
--disable-filters


여기서 맨 첫 줄의 ANDROID_ROOT 값은 자신이 standalone toolchain을 설치한 폴더로 수정합니다.
cygwin 스타일로 폴더 이름을 적어야 합니다.

 

참고:
여기서 cygwin 스타일로 쓰라는 말은
c:/my-android-toolchain 가 아닌 /cygdrive/c/my-android-toolchain 로 경로명을 사용해야 한다는 뜻입니다.

 

참고:
"--arch=arm"과 "--enable-cross-compile"이 arm CPU 용으로 cross compile 하겠다는 옵션입니다.
"--cc"나 "--cross-prefix"에 cross compile 할 때 사용할 compiler에 관한 정보를 줍니다.
"--extra-cflags"나 "--extra-ldflags"는 neon 사용할 때 쓰는 옵션입니다. (c:/android-ndk-r5b/docs/STANDALONE-TOOLCHAIN.html 참조)
나머지는 ffmpeg에서 이러이러한 기능은 빼고 컴파일 하겠다는 뜻입니다. 예를들어 network  이런 기능은 필요없겠지요? ^^

 

configure 과정에서 사용될 임시 폴더를 만듭니다.
c:/ffmpegtmp 로 만듭니다. (그냥 윈도우 탐색기에서 적당히 폴더 하나 만들면 됩니다)

ffmpeg 폴더의 configure 파일에서 아래와 같은 부분을 찾습니다.

 

 # set temporary file name
: ${TMPDIR:=$TEMPDIR}
: ${TMPDIR:=$TMP}
: ${TMPDIR:=/tmp}


이 부분을 다음과 같이 수정합니다.

 

 # set temporary file name
TEMPDIR="c:/ffmpegtmp"
TMP="c:/ffmpegtmp"
: ${TMPDIR:=$TEMPDIR}
: ${TMPDIR:=$TMP}
: ${TMPDIR:="c:/ffmpegtmp"}


참고:
configure 파일을 분석해 보시면 아시겠지만
configure 마지막에 직접 간단한 소스 파일을 컴파일 해서 제대로 컴파일이 되는지 테스트 하는 과정이 있습니다.
이 때 "c:/ffmpegtmp" 임시 폴더가 사용됩니다.
configure를 최대한 수정하지 않고, 오류없이 깔끔하게 진행하기 위해 위와 같은 과정을 거치도록 합니다.

 

cygwin에서 g:/Root/FFmpegBasic/jni/ffmpeg 폴더로 이동한 후에 아래와 같이 configure를 실행합니다.

 

$ ./config.sh

 

WARNING은 한 두개 뜨지만 별다른 오류 없이 잘 실행이 될 것입니다.

 

생성된 config.h 파일을 열어봅니다.

 

#define ARCH_ARM 1
#define HAVE_ARMV5TE 1
#define HAVE_ARMV6 1
#define HAVE_ARMV6T2 1
#define HAVE_ARMVFP 1
#define HAVE_NEON 1


위와 같은 설정들이 잘 되어 있음을 확인할 수 있으실 겁니다.

 

config.h 파일에서 아래와 같은 부분을 찾습니다.

 

 #define restrict restrict


다음과 같이 바꿔줍니다.

 

 #define restrict

 

 

config.sh 파일은 첨부드리니 참고하시기 바랍니다. 

 


다음 강좌에서는 본격적으로 Application.mk와 Android.mk를 작성해 보겠습니다. ^^