ffmpeg源码编译安装(Compile ffmpeg with source) Part 1 : 通用部分
本页内容包含了在Unix/Linux中用源码包编译的通用的结构
可能不仅仅适用于ffmpeg
为啥使用源码包编译
- 编译源码可以扩展功能,
- 实现相对于自己平台的最优化,
- 还可以自定义的修改
概述
大部分源码包编译安装包含下面几个步骤:
- 配置(./configure)
- 编译(make)
- 安装((sudo) make install)
配置的过程就是找找编译时候需要的啥程序有没有安装上,然后配置安装路径和需要安装的组件,在安装包里会有这么一个配置脚本,解决了怎么安装的问题
配置完成后开始编译,这个过程生成需要的库文件和二进制程序,解决了安装啥的问题
安装过程就是将库文件和二进制程序安装到在配置时指定的文件夹,当然如果不需要修改路径,那在编译的文件夹下也是可以使用的
一般安装到/usr/local/中,但可能需要管理员权限
安装路径
在配置的时候可以使用configure --prefix=PREFIX来指定安装到哪里。这里的PREFIX一般是/usr/local/
一般有如下几种文件夹需要安装:
- PREFIX/bin:包含了一般的程序;像ffmpeg,ffplay,ffprobe之类的
- PREFIX/include:存放着一些头文件,在编译与链接到此库的应用程序时用得着;像libavutil/avstring.h, libavcodec/avcodec.h, libavformat/avformat.h之类的
- PREFIX/lib:包含了编译生成的库文件;像libavutil, libavcodec, libavformat之类的
- PREFIX/share:包含了多种多样的不和系统相关的组件,尤其是帮助文件或者实例
通过指定prefix可以自己规划安装的布局
安装到/usr/local/中时,不同的包也会安装到这个文件夹下面,一般来讲这样不有利于恢复安装
如果我们安装到一个像/opt/PROJECT/这样的文件中时,只需要从系统路径中删除这个路径就可以起到删除安装的作用,但这也需要我们在安装的时候把它添加到路径当中
环境变量
有几个系统变量也会影响安装。尤其是在指定了安装的prefix之后,就需要更新一些变量,是系统能够找到你的程序,不然在控制台上输入就会说你没有安装
使用env命令可以显示环境变量
其中对我们安装有影响的包括:
- PATH:这个参数是一些用:分割的路径,什么作用呢?当我们在终端中输入一个命令之后,系统会在这些路径当中根据这个命令查找对应的程序。可以使用export PATH=/opt/PROJECT/:$PATH来添加路径
- LD_LIBRARY_PATH:顾名思义,这个是库文件的PATH,也可是使用相同的方法来添加。但有时不使用它而是使用ldconfig(动态库管理命令)
- CFLAGS:指定C编译器使用的flag,像:预处理指令如-IPREFIX/include,或编译标志。自定义的CFLAGS使用源码包指定的编译系统。有些编译系统允许指定配置选项-extra-cflags。
- LDFLAGS:指定linker使用的指令,通常包括链接指令,如-LPREFIX/lib(用于查找自定义路径中安装的库)。自定义的LDFLAGS作用于源码包指定的编译系统。或者,许多编译系统允许指定configure选项-extra-ldflags。
- PKG_CONFIG_PATH:包含一些使用:分割的路径。许多编译系统使用pkg-config来获取作用在特定的库中的CFLAGS/LDFLAGS,这些flags包含在这些路径中的pkg-config文件里。
安装到非常规的位置或者./configure依赖于其他的动态库、头文件或者工具时,都要更新上述变量
环境变量通常存放在profile文件中。例如:用户文件夹下的.profile或者/etc/profile。可以编辑这些文件永久改变环境变量,或者使用脚本或者终端修改。
导出环境变量到子进程,可以使用export命令。更多内容请查看帮助文档。
LD_LIBRARY_PATH 和 ldconfig
当你在链接一个依赖于其他的库的库文件时,它会在系统设置的路径下和一个自定义的路径列表中查找这个依赖的库文件。有些系统使用LD_LIBRARY_PATH制定这个路径列表。当然我们也可以自己用ldconfig工具设置绝对路径,其实它编辑了/etc/ld.so.conf文件
请注意,在某些系统上,出于安全原因,shell配置文件中定义的LD_LIBRARY_PATH变量被重置了。因此可能需要重新设置每个会话或每个脚本。
配置的要求和发布版
当配置一个包时,需要检测依赖的库和头文件是否存在。很多发行版会提供所欲要库文件的二进制安装包,这样你就不会全都从头编译安装了。
一般来讲,对于一个库,可能需要这个库包和相对应的开发包。库包之中仅包含库,开发包中包含依赖于这个库的其它包在编译时需要的各种文件,像头文件和其他文件啥的。Debian的发布系中开发包使用-dev后缀,在RedHat发布系中使用-devel后缀,在Arch Linux中库包不分开包含着这两个包。
例如,在Debian发布系中,如果你要使用--enable-libmp3lame参数配置ffmpeg以支持mp3的编解码,那你就需要安装libmp3lame-dev的包
你还需要确认系统提供的库包与配置源码包所需的版本是兼容的。当所需的库包版本比提供的要新,那可能需要使用源码安装新的版本
安装后故障排除
首先确认二进制文件,头文件和库是否都在要安装到的位置了。然后验证命令是否可以执行,使用which -a加命令的名字获取命令安装到路径。
为了避免冲突,要小心不要多次安装相同的包
来源
下一部分
ffmpeg源码编译安装(Compile ffmpeg with source) Part 1 : 通用部分的更多相关文章
- ffmpeg源码编译安装(Compile ffmpeg with source) Part 2 : 扩展安装
在Ubuntu,Debian,Mint上编译ffmpeg 本文主要为在Ubuntu,Debian和Mint上编译安装ffmpeg和库文件以及一些扩展的编解码器.当然这与从源中安装无关. 请首先看一下通 ...
- ffmpeg源码编译环境搭建
ffmpeg是视频开发最常用到的开源软件,FFmpeg功能强大,用途广泛,提供几乎所有你能够想到的与视频开发相关的操作,许多商业软件都以ffmpeg为基础进行开发定制. FFmpeg: FFmpeg ...
- linux源码编译安装OpenCV
为了尽可能保证OpenCV的特性,使用OpenCV源码编译安装在linux上.先从安装其依赖项开始,以ubuntu 14.04.X为例讲解在Linux上源码编译安装OpenCV,其他linux版本可以 ...
- Ubuntu 17.04版本下,opencv进行源码编译安装
本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...
- MySQL 源码编译安装
脚本须知: 1. 该脚本目前只测试过mysql版本为5.6.x的源码,其他源码可以对本脚本稍作修改即可 2. 本脚本也可以使用wget mysql源码的方式进行,但考虑到后期提供源码的地址不可用,所以 ...
- Httpd服务进阶知识-LAMP源码编译安装
Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理 ...
- SSH/SSL 源码编译安装简易操作说明
环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...
- 源码编译安装 MySQL 5.5.x 实践
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
- 烂泥:mysql5.5数据库cmake源码编译安装
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...
随机推荐
- HTTP请求方式
HTTP协议中请求的8中方法 OPTIONS获取服务器支持的HTTP请求方法: HEAD跟get很像,但是不返回响应体信息,用于检查对象是否存在,并获取包含在响应消息头中的信息. GET向特定的资源发 ...
- 微信小程序问题---数据传输长度为 1275870 已经超过最大长度 1048576
开发微信小程序时,遇到数据传输长度为 1095538 已经超过最大长度 1048576的问题. 这是setData时操作数据过大导致,一般出现在请求返回数据过大,我们又将这个数据一次性用setData ...
- linux下的dhcp服务器实现
一.得到udhcpd(udhcp服务端): 1.解压busybox 2.配置busybox Networking Utilities——> [*] udhcp server(udhcpd) [* ...
- Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述
Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述: 可能刚刚接触Xamarin的人来说,对于这个概念比较的模糊,认为这说的不都是同一个东西吗?事实并不是这样的 ...
- hbase-hive整合及sqoop的安装配置使用
从hbase中拿数据,然后整合到hbase中 上hive官网 -- 点击wiki--> hive hbase integation(整合) --> 注意整合的时候两个软件的版本要能进行整 ...
- QUARTZ系列之二-监听器
Listener 1.是什么: perform actions based on events occurring within the scheduler. 2.分类:a.TriggerListen ...
- 用eclipse创建动态web项目手动生成web.xml方法
建一个web项目,后来在用到web.xml文件时,才发现项目创建时没有自动创建web.xml文件. 在创建的项目上单击右键,然后单击java EE Tools下的用红线圈住的地方,然后查看你的WEB- ...
- paloalto防火墙版本升级
1.准备工作:此部分不影响生产环境,可直接操作. 1)备份: 2)下载OS HA情况下,在主机下载完成后,选择 Sync To Peer(同步到对端)同步到备机. 2.安装更新 1)在备机上选择安装 ...
- echarts - 条形图grid设置距离绘图区域的距离
在一些数据量过大的情况下,在一个固定的区域绘图往往需要对图表绘制区域的大小进行动态改变.这时候设置条形图距离绘图区域上下左右的距离可使用如下方式:表示条形图的柱子距离绘图区左边30%,距离右边40%, ...
- Subplot 多合一显示
1.均匀图中图 matplotlib 是可以组合许多的小图, 放在一张大图里面显示的. 使用到的方法叫作 subplot. 使用import导入matplotlib.pyplot模块, 并简写成plt ...