Android NDK 在 r17 中宣称不再支持 GCC 并在后续的 r18 中删掉 GCC,并转向Clang和llvm
所以,如果我们使用的NDK版本r18以后的版本,在脚本中要配置Clang
--sysroot:
使用gcc编译时的目录是$NDK/platforms/android-$ANDROID_SDK/arch-arm
使用clang编译时的目录是$NDK/toolchains/llvm/prebuilt/$RUN_PLATFORM/sysroot
--cross-prefix:
使用gcc编译时$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$RUN_PLATFORM/bin/arm-linux-androideabi-
使用clang编译时$NDK/toolchains/llvm/prebuilt/$RUN_PLATFORM/bin/arm-linux-androideabi-
--cc:
使用gcc编译时$NDKtoolchains/arm-linux-androideabi-4.9/prebuilt/$RUN_PLATFORM/bin/arm-linux-androideabi-gcc
使用clang编译时$NDK/toolchains/llvm/prebuilt/$RUN_PLATFORM/bin/armv7a-linux-androideabi$ANDROID_SDK-clang
--cxx:
使用gcc编译时$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$RUN_PLATFORM/bin/arm-linux-androideabi-g++
使用clang编译时$NDK/toolchains/llvm/prebuilt/$RUN_PLATFORM/bin/armv7a-linux-androideabi$ANDROID_SDK-clang++
#用于编译android平台的脚本
#!/bin/bash
# 以下路径需要修改成自己的NDK目录
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# 最低支持的android sdk版本
API=21
# --extra-cflags中添加'-DVK_ENABLE_BETA_EXTENSIONS=0', 防止引用vulkan_beta.h头文件
function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
--prefix=$PREFIX \
--disable-neon \
--disable-hwaccels \
--disable-gpl \
--disable-postproc \
--enable-shared \
--enable-jni \
--disable-mediacodec \
--enable-small \
--enable-gpl \
--disable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--disable-programs \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-DVK_ENABLE_BETA_EXTENSIONS=0 -mno-stackrealign -Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}
# CPU架构
#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/llvm-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android
运行上面编译脚本成功后,会生成对应的so库