FFmpeg版本:
4.3.4
NDK版本:r20b
NDK在r16
之后将gcc
编译器移除了,需要使用clang
编译器。所以在配置脚本的时候需要设置编译器
configure中编译器参数配置:
--cc=clang路径 \
--cxx=clang++路径 \
修改文件ffmpeg/configure:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
替换为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
复制代码
修改好后保存这样才符合android
比较重要的地方是要除了设置clang路径外还需要正确设置sysroot交叉编译根目录
完整的编译脚本配置:
#!/bin/bash
export NDK_HOME=NDK路径
export PLATFORM_VERSION=android-21
function build
{
echo "start build ffmpeg"
./configure \
--target-os=android \
--prefix=$PREFIX \
--arch=$ARCH \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--cc=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-clang \
--cxx=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-clang++ \
--enable-cross-compile \
--sysroot=$SYSROOT \
--enable-small \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "build ffmpeg for $ARCH finished"
}
#arm版本
ARCH=armv7a
CPU=armv7a
export PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-
ADDI_CFLAGS="-marm"
# SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-arm/ 此这个交叉编译目录是ndk:r14
SYSROOT=$TOOLCHAIN/sysroot
build
复制代码
进qun 免费分享:资料包括(C/C++,Android,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)
较为重要的参数配置:
--target-os=android
:目标设置为android--cross-prefix=XXXX
: 为编译工具指定路径--cc=XXXX
:指定使用何种C编译器(默认gcc)-cxx=XXXX
:add ECFLAGS to CXXFLAGS--sysroot=XXXXX
:置顶交叉编译根目录--enable-shared
:生成动态so库--prefix=XXX
:生成lib以及include文件存放在哪里