ffmpeg版本:6.0
NDK版本:21.4.7075529
注意:6.0版本编译.a文件时,libavcodec.a和libswscale.a包含同一个half2float.o,在链接libavcodec.a和libswscale.a时会出现函数重定义的错误。需要在执行脚本之前修改libswscale文件夹下的Makefile,将OBJS下的half2float.o删除。脚本中NDK等路径根据自己电脑的路径自行修改。
arm64-v8a平台编译脚本:
#!/bin/sh
# NDK 所在的路径
NDK=/home/tianhao/Android/Sdk/ndk/21.4.7075529
# 需要编译出的平台,这里是 arm64-v8a
ARCH=aarch64
# 支持的最低 Android API
API=21
# 编译后输出目录,在 ffmpeg 源码目录下的 /android/arm64-v8a
OUTPUT=$(pwd)/android/arm64-v8a
# NDK 交叉编译工具链所在路径
TOOLCHAIN=/home/tianhao/Android/Sdk/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT_L=$TOOLCHAIN/sysroot/usr/lib/aarch64-linux-android
GCC_L=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x
build() {
./configure \
--target-os=android \
--prefix=$OUTPUT \
--arch=$ARCH \
--cpu=armv8-a \
--sysroot=$TOOLCHAIN/sysroot \
--enable-static \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-debug \
--disable-doc \
--disable-avdevice \
--disable-shared \
--enable-cross-compile \
--enable-asm \
--enable-small \
--enable-avcodec \
--enable-avformat \
--enable-avutil \
--enable-swresample \
--enable-swscale \
--enable-avfilter \
--enable-postproc \
--enable-network \
--enable-bsfs \
--enable-filters \
--enable-encoders \
--enable-gpl \
--enable-muxers \
--enable-parsers \
--enable-protocols \
--enable-nonfree \
--enable-jni \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--cc=$TOOLCHAIN/bin/aarch64-linux-android$API-clang \
--cxx=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ \
--extra-cflags="-fpic -march=armv8-a -I$OUTPUT/include" \
--ex