Linux环境编译ffmpeg生成.so库

 

ffmpeg官网

编译错误:

make: *** No rule to make target '/tests/Makefile'.  Stop.

Unknown option "--disable-ffserver".

See ./configure --help for available options.

出现这个错误的原因可能是ffmpeg版本过高或者NDK版本过高

 

我的环境:

  1. NDK(android-ndk-r14b-linux-x86_64.zip)
  2. FFmpeg(ffmpeg-3.3.tar.gz)

先下载安装NDK

NDK归档历史版本下载

下载android-ndk-r14b-linux-x86_64.zip 然后解压  命令:unzip  android-ndk-r14b-linux-x86_64.zip  如果未安装工具软件先安装压缩工具

可以下载再放入到指定文件夹 或者直接下载

mkdir ndk_build//新建文件夹
cd ndk_build//进入到文件夹
wget +linux版本的下载链接地址//下载ndk
unzip + 压缩文件//解压

配置ndk(进入环境配置后在最后添加配置路径  ESC键退出编辑 然后保存退出  ,记得执行环境变量)

vim ~/.bashrc//进入环境变量配置

//以下代码添加到文末
export NDKROOT=/home/ndk_build/android-ndk-r14b//配置你的安装路径
export PATH=$NDKROOT:$PATH//配置路径

:wq!//先按Esc键然后输入wq!保存退出

source ~/.bashrc//执行环境变量
ndk-build//查看是否安装成功,只要不是显示ndk-build not found,则表示安装成功

 

命令下载ffmpeg版本  建议不要太高  4.1.1我没有编译成功

wget http://ffmpeg.org/releases/ffmpeg-3.3.tar.gz

tar -xzf ffmpeg-3.3.tar.gz

 

编写编译(.sh)脚本

创建编译脚本

在ffmpeg 跟目录下创建android_build.sh(名称随意):

然后编辑该脚本

touch android_build.sh//创建脚本文件

vim android_build.sh

然后复制一下代码使用Shift+Insert键粘贴到脚本中,然后只修改配置NDK路径,注意检查文件copy是否全

#!/bin/bash
make clean
export NDK=/home/ndk_build/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

先按Esc键然后输入wq!保存退出 然后执行下面代码

chmod +x android_build.sh 

 

然后修改configure,如果你不修改的话,编译出来过后的.so文件后面会有一串数字,无法使用,所以得修改他的命名规则

将该文件中的如下四行:(输入/SLIBNAME快速搜索定位)

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)'

先按Esc键然后输入wq!保存退出

最好编译.sh文件
./android_build.sh

Linux环境编译ffmpeg生成.so库

然后等待编译完成