에구 ffmpeg 관련된 포스팅만 세개째..
cpu별 빌드와 일부 플래그에 관해 정리.
(참조는 rockplayer ffmpeg 소스 코드 중 build_android.sh)
rockplayer는 Android.mk 를 사용한 ndk-build 가 아닌 해당 툴체인만을 참조해 빌드한다.
이는 bambuser 와 비슷한데, cpu와 플래그 설정이 좀더 세밀하게 구분되어 있다.
우선, configure 항목중 스크립트에 언급된 내용에 대해 기술한다. 해당 설정이 플레이어마다
각자 다르므로 이 설정이 정확한 값인지는 확인할 수는 없다 -_-;;;
더욱이 ffmpeg도 계속 수정되고 있으니...쩝
일반적인 내용으로 빌드해보고, 아래 관련한 오류가 나면 적용해봐야 할 듯...
기본적으로 설정해야 하는 내용은 비슷하다.
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86
--target-os=linux \
--arch=arm \
--source-path=ffmpeg소스폴더 \
--sysroot=NDK의 ndk\platforms\android-n\arch-arm 폴더로 기본 헤더와 라이브러리 \
--enable-cross-compile \
--cross-prefix= ndk\toolchains\arm-eabi-4.4.0\prebuilt\linux-x86\bin\arm-eabi- \
--prefix=출력폴더 \
--cc=툴체인의 arm-eabi-gcc \
--nm= 툴체인의 arm-eabi-nm \
rockplayer의 경우 필요하다는 플래그
--extra-libs="-lgcc" : 몇몇 런타임 함수 심볼 문제
--enable-protocols : 파일 오픈시 오류
--whole-archive : 작은 so 파일이 생성되는 문제
--no-stdlib : 안드로이드는 standard c 를 사용하지 않음
--disable-doc : 버그같단다..
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
-fasm : 안드로이드 헤더파일에 asm 관련 키워드가 달라 발생하는 오류
-fno-short-enums : 최적화. ffmpeg 빌드시 가변크기의 enum과 관련된 넘인데.. 먼소린지..
요건 --no-enum-size-warning 으로도 해결가능.
-Dipv6mr_interface=ipv6mr_ifindex : ipv6 관련 내용인듯..
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
-llog : 디버그시
-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x 는 많은 소스에서 사용하는데 쓸필요 없다 함.
CPU별 --extra-cflags 추가 플래그
arm v6
-marm -march=armv6
arm v7vfpv3
-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a
arm v7vfp
-mfloat-abi=softfp -mfpu=vfp -marm -march=armv7-a
arm v7n
-mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8
arm v6+vfp
-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=armv6
빌드
make -j4 install
$PREBUILT/bin/arm-eabi-ar d libavcodec/libavcodec.a inverse.o
ffmpeg이 inverse.c가 libabutil, libavcodec 양쪽에 포함되어 있는데, 이 처리를 잊을 경우 libffmpeg.so 생성시 오류가 발생
$PREBUILT/bin/arm-eabi-ld
-rpath-link=$PLATFORM/usr/lib
-L$PLATFORM/usr/lib
-soname libffmpeg.so
-shared
-nostdlib
-z,noexecstack
-Bsymbolic
--whole-archive
--no-undefined
-o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a
-lc -lm -lz -ldl -llog
--warn-once
--dynamic-linker=/system/bin/linker
$PREBUILT/lib/gcc/arm-eabi/4.4.0/libgcc.a
'프로그래밍 > Android' 카테고리의 다른 글
List adapter (0) | 2011.09.15 |
---|---|
낙서 (0) | 2011.09.07 |
터치 이벤트 처리순서 (0) | 2011.09.01 |
천천히 로딩되는 리스트 아이템 (0) | 2011.08.22 |
이미지 클리핑 기초 (0) | 2011.08.18 |
ffmpeg 빌드 #2 ffmpeg 옵션별 빌드 (0) | 2011.07.06 |
ffmpeg 라이브러리 빌드 #1 (0) | 2011.06.30 |
Drag&drop listview (0) | 2010.10.06 |
뷰 전환시 3차원 에니메이션 적용하기 (0) | 2010.09.17 |
안드로이드 위젯 배경 이미지, 나인패치 (0) | 2010.08.17 |