NDK编译多个平台的FFMPEG
编译配置里面的新名词
- Toolchain — tools that are used for compiling and building of sources.
- Sysroot — sysroot 是一个包含针对您的
目标的系统标头和库
的目录 - Prefix — directory in which result of building will be written to.
- Cross-prefix — directory of compiler to be used.
- ABI — architecture of processor (i.e. x86, arm-v6, armv8–64 and so om).
- CFLAGS — flags for C-compiler.
- LDFLAGS — flags for linker.
android支持的7钟CPU架构
armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢(只支持armeabi)
armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构)
arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit(支持 armeabi-v7a、armeabi 和 arm64-v8a)
*x86 intel 32位,一般用于平板(支持 armeabi(性能有所损耗) 和 x86)
x86_64 intel 64位,一般用于平板(支持 x86 和 x86_64)
mips 基本没见过(支持 mips)
mips64 基本没见过(支持 mips 和 mips_64)
利用独立工具链接生成不同cpu架构的头文件
https://developer.android.com/ndk/guides/standalone_toolchain1
2
3
4
5
6
7
8
9
10
11$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--arch=arm --platform=android-21 --install-dir=/home/hx/Downloads/ffmpeg-android/toolchain-android/arm
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--arch=arm64 --platform=android-21 --install-dir=/home/hx/Downloads/ffmpeg-android/toolchain-android/arm64
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--arch=x86 --platform=android-21 --install-dir=/home/hx/Downloads/ffmpeg-android/toolchain-android/x86
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--arch=x86_64 --platform=android-21 --install-dir=/home/hx/Downloads/ffmpeg-android/toolchain-android/x86_64
另外一种利用toolchain方式生成,生成arm64,android 的api 必须对应21 (Android 5.0 API 21 Lollipop)1
2$ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
--toolchain=aarch64-linux-android-4.9 --platform=android-21 --install-dir=/home/hx/Downloads/ffmpeg-android/toolchain-android/x86_64
–arch 有4种选项
arm arm64 x86 x86_64
./configure \
–cross-prefix=/home/hx/Downloads/ffmpeg-android/toolchain-android/bin/aarch64-linux-android- \
–sysroot=”/home/hx/Downloads/ffmpeg-android/toolchain-android/sysroot” \
–host=aarch64-linux \
–enable-pic \
–disable-asm \
–enable-static \
–disable-shared \
–disable-opencl \
–prefix=”/home/hx/Downloads/ffmpeg-android/build/arm64-v8a” \
–disable-cli &&
make -j8 &&make install
./configure –target-os=linux –cross-prefix=/home/hx/Downloads/ffmpeg-android/toolchain-android/bin/aarch64-linux-android- –arch=arm64 –cpu=armv8-a –enable-runtime-cpudetect –sysroot=/home/hx/Downloads/ffmpeg-android/toolchain-android/sysroot –enable-pic –enable-libx264 –enable-libass –enable-libfreetype –enable-libfribidi –enable-libmp3lame –enable-fontconfig –enable-pthreads –disable-debug –enable-version3 –enable-hardcoded-tables –disable-ffplay –disable-ffprobe –enable-gpl –enable-yasm –disable-doc –enable-shared –enable-static –pkg-config=/home/hx/Downloads/ffmpeg-android/ffmpeg-pkg-config –prefix=/home/hx/Downloads/ffmpeg-android/build/arm64-v8a –extra-cflags=-I/home/hx/Downloads/ffmpeg-android/toolchain-android/include –extra-ldflags=-L/home/hx/Downloads/ffmpeg-android/toolchain-android/lib –extra-libs=’-lpng -lexpat -lm’ –extra-cxxflags= &&make -j 8 && make install
错误:checking host system type… Invalid configuration `aarch64-linux-android’:
解决方法:更新config.sub and config.guess,或者更新整个类库
armeabi 兼容是最全的,armeabi-v7速度比较块,但有些arm的cpu不兼容