编译环境:ubuntu5.4.0-77
交叉编译器:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux
目标板:工控M6Y2C系列 (cortex A7)
具体步骤:
一、安装
具体需要什么版本的可以去ffmpeg官网自行下载,我这里采用的是ffmpeg4.3.2版本的.
http://ffmpeg.org/download.html#build-linux
http://ffmpeg.org/releases/ffmpeg-4.3.2.tar.gz
下载完成后,用开始解压
tar -zxvf ffmpeg-4.3.2.tar.gz
二、编译
下载源码解压到用户目录。
执行以下命令去配置:
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc(编译器) --arch=arm --prefix=(安装目录) --enable-shared --enable-pic --disable-static --enable-gpl --enable-nonfree --disable-ffplay --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-yasm --disable-stripping
根据我的具体情况我的配置是:
./configure --prefix=/home/vmuser/ff --enable-cross-compile --cross-prefix=arm-linux-gnueabihf- --cc=arm-linux-gnueabihf-gcc --arch=arm --target-os=linux --enable-gpl --enable-shared --enable-pic --enable-nonfree --enable-libx264 --pkg-config-flags=--static --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-yasm --disable-stripping --extra-cflags="-I/home/vmuser/h264/h26_ff/include" --extra-ldflags="-L/home/vmuser/h264/h26_ff/lib" --extra-libs=-ldl
配置解析:
1 生成参数
参数 功能 注释 --arch 编译架构 --help 打印帮助信息 --prefix 安装路径 Linux默认为/usr/local --libdir 库安装路径 默认PREFIX/lib --shlibdir 共享库安装路径 默认PREFIX/lib --incdir 头文件安装路径 默认PREFIX/include/ffmpeg --mandir 指定man page路径 默认PREFIX/man --cc 指定编译器 默认gcc --make 指定何种make --source-path 源码路径 --pkg-config 指定pkg-config 默认pkg-config --pkg-config-flags 指定pkg-config参数 默认--static --extra-cflags 添加额外的CFLAG ECFLAGS --extra-ldflags 添加额外的LDFLAG ELDFLAGS --extra-libs 添加额外的LIB ELIBS --cpu 指定最小的CPU版本 --nm 指定NM工具 --ar 指定AR工具 --as 指定汇编工具 --ld 指定LD链接器
2 交叉参数
参数 功能 注释 -cross-prefix 指定编译工具 交叉编译 --cross-compile 假定使用交叉编译 --target-os 目标系统 --sysroot 交叉编译树的根 libc --sysinclude 交叉编译头文件 --target-exec 目标系统上的运行命令 --target-path 目标系统上的模拟构建路径
3 性能参数
以下参数使用--enable-foo启用或使用--disable-foo禁用时使用--e/d-代替。
参数 功能 注释 --e/d-debug 是否调试 enable时可指定level --e/d-optimizations 编译器优化 --samples 制定测试示例位置 --e/d-stripping 是否剥离可执行程序与共享库 --e/d-asm 汇编优化 --e/d-yasm 是否使用yasm汇编器
4 功能选项
使用--enable-foo启用或使用--disable-foo禁用需要的功能插件,使用--e/d-代替。某些部件(如decoder)enable时需要明确指明,例:--enable-decoder=libdavs2。
参数 功能 注释 --e/d-static 静态库构建 默认:no --e/d-shared 共享库构建 默认:no --e/d-pic 代码非位置依赖 默认:no --e/d-gpl GPL代码使用 --e/d-nonfree 非免费得代码使用 默认:no --e/d-doc 文档构造 默认:yes --e/d-pthreads pthreads 默认:yes --disable-decoder 禁用所有解码器 同理其他 --enable-decoder=DEC 打开某个解码器 同理其他 --enable-libdavs2 启用avs2解码器 同理其他
三、安装
执行完成后,用make,make install进行编译安装。
四、移植
Make install 成功后,用户安装目录下出现bin,include,lib,share目录。
进入bin目录执行file ffmpeg 查看编译出的执行程序是否是ARM架构。
移植时把对应的bin,lib目录下的文件移植到对应板子上的/usr/bin,/usr/lib目录下,注意查看解压时软链接是否失效,可用ls -l查看库文件的软链接(其它目录若有调用可自行移植)。
若出现/usr/lib空间不足时,可放在/opt目录或者ext4格式的TF卡,然后指定其库文件路径。操作步骤如下:
在/etc/profile文件最后一行加入
export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
退出保存后执行source /etc/profile,然后执行ffmpeg -version进行验证,若无报任何错误表示移植成功。