一、前言
编译ffmpeg是学习ffmpeg的第一步,本篇博客的环境是mac os 上 NDK21 版本编译ffmpeg。之所以写这篇博客,主要是因为去年编译的时候一切顺利进行,而今年电脑CPU烧了(使用电脑设备要特别小心电量问题,电量太低容易造成cpu发热)之后,所有数据都没了,所以都是新环境,和去年一样的脚本,今年编译却失败了。
二、失败原因
失败是成功之母,造成编译失败的原因是,所选的sysroot和toolchains出了问题
工具链选择了:
/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/toolchains/arm-linux-androideabi-4.9,
sysroot选择了:
/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/sysroot
现象是:
【1】部分头文件找不到,连ndk 核心jni文件也找不到
【2】clang、clang++找不到
以上问题莫名其妙,希望有了解的可以指教一下
三、成功方案
成功方案是参考网上博客的,使用了llvm,发现成功了。
#!/bin/bash
NDK=/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669
TOOLCHAIN_ROOT_DIR=darwin-x86_6敏感词
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
API=18
#要编译的ffmpeg内容方法
function build_android {
make clean
echo "Compiling FFmpeg for $CPU"
./configure \
--prefix=$PREFIX \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--enable-gpl \
--enable-shared \
--enable-runtime-cpudetect \
--enable-small \
--enable-cross-compile \
--enable-asm \
--enable-neon \
--enable-jni \
--enable-mediacodec \
--enable-h26敏感词_mediacodec \
--enable-hwaccels_mediacodec \
--disable-debug \
--disable-hwaccels \
--disable-postproc \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-avdevice \
--disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
make j4
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/platforms/android-${API}/arch-arm
# SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot #这个也是可以的,大概率和和ndk版本一致,如果是21,则不支持之前的版本
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS=" -DANDROID -mfloat-abi=softfp -mfpu=vfp -marm - march=$CPU "
# OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm - march=$CPU "
build_android