安装流程参考
最新版本ffmpeg6.0源码安装+vscode开发环境搭建!
1、配置
下好ffmpeg后,设置配置
sudo ./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-version3 --enable-nonfree --enable-pthreads --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-pic
这些配置的作用如下:
-
–prefix=/usr/local/ffmpeg :设置安装到什么路径下。
仅影响后续make install时,将编好的产物复制到什么路径下,主要包含so、a、头文件、可执行应用程序;以及make uninstall时,去哪里删除这些东西。
如果缺省,则库文件安装到/usr/local/lib,头文件安装到/usr/local/include,可执行应用程序安装到/usr/local/bin -
–enable-shared:构建共享库(默认关闭),编译安装完,才会有.so动态链接库文件;
不开启的话,只会有.a静态链接库文件
- libx264、libx265、libfdk-aac都是第三方库
- –enable-gpl:允许使用GPL(默认关闭)想要使用这些第三方库,则需要开启
- –enable-version3:升级GPL到版本3(默认关闭)
- –enable-nonfree:允许使用非免费的代码,产生的库和二进制程序将是不可再发行的(默认关闭)
- –enable-pthreads:启用pthreads多线程(默认关闭)
2、编译
sudo make -j
最后一步遇到问题
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/libfdk-aac.a(genericStds.o): relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: 错误的值
collect2: error: ld returned 1 exit status
ffbuild/library.mak:118: recipe for target 'libavcodec/libavcodec.so.60' failed
make: *** [libavcodec/libavcodec.so.60] Error 1
参考了很多资料,均未能解决,各家有各种错误
ffmpeg编译错误问题,.rodata’ can not be used when making a shared object; recompile with -fPIC
编译时出现: can not be used when making a shared object 和fPIC
make报错:relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5‘
ffmpeg使用fPIC静态库解决记录
编译ffmpeg出错 recompile with -fPIC
但是大概得出结论,可能是编译静态库动态库混用的问题。自己的编译已经通过了,就是链接时,其他库有问题。
尝试解决
方案1,重编fdk-aac
从报错打印来看,就是libfdk-aac.a这个有问题。首先看他路径对不对,我们的ffmpeg指定了安装到/usr/local/ffmpeg下,但是这个引用好像在/usr/lib/libfdk-aac.a,这个路径是从fdk-aac.pc中获取到的。可能是我们编fdk-aac时没有指定路径,装的地方不对;也可能是环境变量第一顺位是这里,就已经找到fdk-aac.pc文件;反正就它有问题
简单重编了fdk-aac之后,到ffmpeg还是报这个错
有人说是这个东西没有开启动态库编译,并且开了的话要开-fPIC。看了一下,编fdk-aac时./configure设置了–enable-shared,同时设置了CPPFLAGS=“-fPIC”,也一样到ffmpeg时报错
方案2,ffmpeg不编第三方库
就是只使用
sudo ./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-nonfree --enable-pthreads --enable-pic
直接编过了。但是不行啊,得用啊。
方案3,ffmpeg不编动态库
就是不启用–enable-shared,这样也能编过,但是只有.a文件,肯定也不行
此时基本确认是动态库问题
方案4,在路径下发现没有fdk-aac的so文件
具体原因大概是因为编ffmpeg的动态库文件需要依赖fdk-aac的动态库文件,我们装的fdk-aac在/usr/local/ffmpeg下,由于安装时是从环境变量中获取fdk-aac的pc文件去取得库地址,我们装的fdk-aac在第二顺位环境变量下。
可能是ffmpeg写死路径的问题,也可能是系统自带fdk-aac且处于/usr/lib下,/usr/lib下的fdk-aac没有动态库文件。
- 从我们自己装的路径下,复制一个so到ffmpeg需要的路径/usr/lib下,再安装,就正常了
3、可以安装了
sudo make install
装完可以在我们指定的路径下,看到可执行文件、库文件和头文件了