ffmpeg 环境搭建之linux 扩充外部库:x264

>ffmpeg4.2.1版本遇到问题:/usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against .rodata' can not be used when making a shared object; recompile with -fPIC
   解决方法:在x264和ffmpeg-4.2.1配置的时候均也添加pic支持
  ①x264配置:./configure --enable-shared  --prefix=/home/aston/ffmpeg-all/x264-enable-pic  --disable-asm --enable-pic
  ②ffmpeg-4.2.1配置:./configure --prefix=/home/aston/ffmpeg-all/ffmpeg-4.2.1-install 	--enable-shared --enable-ffplay --enable-libx264 --enable-gpl --disable-x86asm --extra-cflags="-I/home/aston/ffmpeg-all/x264-enable-pic/include" --extra-ldflags="-L/home/aston/ffmpeg-all/x264-enable-pic/lib"  --enable-pic
  		//--extra-cflags 后面跟引入头文件目录,--extra-ldflags后面跟引入库目录。(这里用于包含外部x264库地址)
  
  //ffmpeg-3.3.1则不需要

gcc编译选项fpic/fPIC, fpie/fPIE的说明

参考:CentOS下安装FFmpeg以及多个依赖库

下载ffmpeg

①从ffmpeg官网:http://ffmpeg.org/download.html下载最新的ffmpeg安装包,然后通过如下命令解压:
tar jxf ffmpeg-4.2.1.tar.bz2

②用Git从github下载

配置

FFmpeg中有部分汇编代码,因此需要编译该部分代码,安装yasm即可,你可以认为yasm就是一个汇编编译器。

# CentOS		sudo yum install yasm
# Ubuntu		sudo apt-get install yasm

进入到ffmpeg目录开始配置ffmpeg

1	--prefix=/home/aston/ffmpeg-all/ffmpeg  //安装位置
2	./configure --enable-shared //生成动态链接库  --因为共享库的代码都是位置无关的,所以通常还需要添加编译选项-fPIC。

3	 ./configure --enable-ffplay 
//默认配置ffbulid/config.mak中是!CONFIG_FFPLAY=yes
			//因为config.h中的宏定义: 599行 #define CONFIG_FFPLAY 0【即不生成ffplay】

总: ./configure --prefix=/home/aston/ffmpeg-all/ffmpeg --enable-shared --enable-ffplay 

ffmpeg编译后ffplay没有生成的问题<-没有安装/正确安装sdl1.2和sdl2.0

并没有编译出ffplay,在使用ffplay播放视频的时候没有找到ffplay.
发现:configure生成的ffbulie/config.mak文件中的关于FFPLAY的一行前面有感叹号:!CONFIG_FFPLAY=yes
config.h中的宏定义: 599行 #define CONFIG_FFPLAY 0

原因:缺少了两个库:sdl2.0 sdl1.2

安装sdl1.2十分方便,直接通过apt-get进行:
sudo apt-get install libsdl1.2-dev 如果不行(依赖项 版本等问题) 用aptitude代替anpt-get安装

在官网上去下载sdl2.0:http://www.libsdl.org/download-2.0.php
或者https://download.csdn.net/download/franklin008/10226519下载连接
解压 tar -zxvf SDL2-2.0.6.tar.gz
解压后cd进目录,依次执行:
./autogen
./configure
make
sudu make install
→→库文件在 /usr/local/lib中 头文件在 /usr/local/include/SDL2 中。

编译结果

make   →→在解压目录生成ffmpeg ffplay等文件
make install		→→在目标安装位置出现文件

# 如无意外,很快会在/usr/local/ffmpeg目录中安装文件,文件结构如下:
# bin/	ffmpeg主程序二进制目录   
	包含{ffmpeg ffprobe 
		(后面几个默认没有,需要使能才会生成) ffplay    ffserver  sdl2-config  vsyasm  yasm  ytasm}
# lib/	库文件目录
# include/	C/C++头文件目录
# share/	文档目录
# 四个目录。

可能遇到的问题:无法查看版本号←没有包含lib

然后进入bin目录,执行		./ffmpeg -version	查看当前版本的详细信息
发现报错:	libavdevice.so.57: cannot open shared object file: No such file or directory

原因是lib目录未加载到链接到系统库中,系统ld目录列表在/etc/ld.so.conf中,
打开文件会发现,内容是include /etc/ld.so.conf.d/*.conf
即引用了/etc/ld.so.conf.d/下面所有的.conf文件,比如mariadb-x86_64.conf我们只需要创建一个文件并写入lib路径即可,
应对:执行命令: 创建并打开vim /etc/ld.so.conf.d/ffmpeg.conf 然后添加一行内容: 【ffmpeg/lib的pathname】/home/aston/ffmpeg-all/ffmpeg/lib 之后保存并退出
,然后执行 ldconfig 使配置生效,现在再次执行查看版本号【ffmpeg -version】->显示就正常了
//类似的x264库也可能出现这个问题->导致./ffmpeg -version时报错找不到libx264.so.159z找不到

ffmpeg环境变量设置和安装后不能加载共享库的错误解决->那就添加进去

./ffmpeg -version正常显示版本号
在这里插入图片描述

中途可能会报错:WARNING: using libx264 without pkg-config
因为yum安装x264时,没有自动给我们加入环境变量,执行:export PKG_CONFIG_PATH=/home/sxm-download/x264-master:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH解决
//这个命令中/usr/local/lib/pkgconfig目录在安装sdl2后会包含sdl2.pc
//而在x264库解压配置文件夹能够找到x264.pc 将其地址/home/sxm-download/x264-master:导出到PKG_CONFIG_PAT即可
简述configure、pkg-config、pkg_config_path三者的关系
ERROR: x265 not found using pkg-config

x264外部库

官网下载:http://www.videolan.org/developers/x264.html 如果慢就windows下载zip

配置:
./configure --enable-shared  --prefix=/home/aston/ffmpeg-all/x264    --enable-pic  --disable-asm 
//--enable-pic生成位置无关代码,否则ffmpeg-4.2.1再外接x264时会出错
//要么--disable-asm 要么安装nasm
//ffmpeg外接x264需要的时x264库额动态版本 故需要--enable-shared

//--disable-asm 或者--no-asm都代表不会编译x264库的汇编部分 后面可能会遇到问题 最好还是编译一下
然后make && make install
之后在安装位置会有3个文件夹:
1、bin 
2、include (x264.h及x264_config.h)
3、lib (libx264.a 静态库[好多个.o合在一起]  libx264.so动态库[shared object] )


要外接x264库,就需要在ffmpeg配置时进行相关配置:
./configure --prefix=/home/aston/ffmpeg-all/ffmpeg-4.2.1-install 	--enable-shared --enable-ffplay --enable-libx264 --enable-gpl --disable-x86asm --extra-cflags="-I/home/aston/ffmpeg-all/x264-enable-pic/include" --extra-ldflags="-L/home/aston/ffmpeg-all/x264-enable-pic/lib"  --enable-pic
//ffmpeg要使用--enable-shared  不然会找不到x264

配置好后会打印如下显示:表示已经包含了外部库x264
在这里插入图片描述

一个库要被一个项目所连接

x264库安装后不能加载被共享库的错误解决

发布了81 篇原创文章 · 获赞 1 · 访问量 2922

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/103037382
今日推荐