mac 下交叉编译android平台ffmpeg

  1. 准备工作
    下载ffmpeg,官网最新
    下载NDK,android-ndk-r18b,19以后独立工具链使用有条件,参考官方文档
    修改ffmpeg configure文件 参考引文1
  2. 编译脚本
#!/bin/bash 
ADDI_CFLAGS="-marm" 
API=27
PLATFORM=arm-linux-androideabi 
CPU=armv7-a 
#使用自己的路径 
NDK=/Users/seedinwind/Documents/android-ndk-r18b
SYSROOT=$NDK/platforms/android-$API/arch-arm/ 
ISYSROOT=$NDK/sysroot 
ASM=$ISYSROOT/usr/include/
TOOLCHAIN=$NDK/tmp/my-android-toolchain
#手动创建输出目录 
OUTPUT=/Users/seedinwind/Documents/ffmpeg-4.2.1/share 
function build_one
 { 
 ./configure \
 --prefix=$OUTPUT \
 --enable-shared \
 --disable-static \
 --disable-doc \
 --disable-ffmpeg \
 --disable-ffplay \
 --disable-ffprobe \
 --disable-avdevice \
 --disable-doc \
 --disable-symver \
 --nm=${TOOLCHAIN}/bin/arm-linux-androideabi-nm \
 --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
 --target-os=android \
 --arch=arm \
 --enable-cross-compile \
 --sysroot=$SYSROOT \
 --extra-cflags="-I$ASM -Os -fpic -marm" \
 --extra-ldflags="-marm" \
 $ADDITIONAL_CONFIGURE_FLAG 
 #make clean 
 #make -j4 
 #make install 
} 
build_one

注意ASM参数,编译依赖头文件和库文件,库文件位置为SYSROOT,头文件位置为ASM,ndk-r18b版本直接放在$ISYSROOT/usr/include/目录下,其中asm文件夹根据目标平台放在不同子目录下,编译时要把对应的平台目录下的asm放到$ISYSROOT/usr/include/下,否则会报错,头文件找不到

3.独立工具链
独立工具链参考NDK官方文档 ,执行命令生成对应平台独立工具链,设置$TOOLCHAIN

python3 $NDK_HOME/build/tools/make_standalone_toolchain.py 
–arch arm --api 21 --install-dir /tmp/my-android-toolchain

4.执行

make
make install

FFmpeg的Android平台移植—编译篇
ffmpeg ./configure参数说明
解决ffmpeg 交叉编译报错 ./configure: line 953: /bin/arm-linux-androideabi-clang: No such file or directory C

点赞