一、前言
編譯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