配置环境
编译环境ubuntu16.0.4
编译版本 ffmpeg-3.2.12
打开profile文件
vi /etc/profile
在尾部添加
export NDK_PATH="/home/lq/android-ndk-r14b"
export PAHT=$NDK_PATH:$PATH
保存
source /etc/profile
shell脚本
用vi文件编辑器写ffmpeg_build.sh文件,不能从windows直接复制,不然会有特殊字符,导致编译错误
#!/bin/bash
#最低兼容版本
export PLATFORM_VERSION=android-14
function build
{
echo "start build ffmpeg for $ARCH"
#configure 编译裁剪配置,你可以在ffmpeg根目录下使用./configure --hellp 查看 ./configure后可填入的参数。
#-target-os 指定编译目标的系统,由于编译目标是Android系统,Android又是基于liunx内核,所以是liunx,如果要是iOS,则指定darwin
./configure --target-os=linux \
#编译输出文件路径
--prefix=$PREFIX --arch=$ARCH \
#禁止输出文档
--disable-doc \
#启用构建共享库
--enable-shared \
#禁止静态库
--disable-static \
--disable-yasm \
--disable-asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--cross-prefix=$CROSS_COMPILE \
--enable-cross-compile \
--sysroot=$SYSROOT \
#启用优化生成库文件大小,编译时间会延长
--enable-small \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
#清理编译过程中临时文件
make clean
#编译,可指定编译线程数 -j4
make
#执行安装,就是将相关编译好的程序,类库以及头文件示例代码拷贝到
make install
echo "build ffmpeg for $ARCH finished"
}
ARCH=arm
CPU=arm
#生成库文件的安装目录
PREFIX=$(pwd)/android/$ARCH
#编译工具链目录
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
#类似于通配符方式指定 bin 目录下以 arm-linux-androideabi-
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
ADDI_CFLAGS="-marm"
# 设置你的android平台编译器的版本 这里采用Android4.0
SYSROOT=$NDK/platforms/$PLATFORM_VERSION/arch-$ARCH/
build
编译
修改configure文件,主要跟动态库名字有关,不修改,Android无法识别
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)'
执行编译脚本
./ffmpeg-build.sh
编译成功后目录,include头文件,lib文件夹中存放动态库
clipboard.png
clipboard2.png
问题
问题1.pngndk版本引起的,解决方法替换成ndk14b
网友评论