Linux怎么通过源代码安装软件

前言
本文主要介绍在linux上怎样把源代码编译成机器可以识别的二进制文件 。
首先,我们要理解为什么要编译软件 。

Linux怎么通过源代码安装软件

文章插图
 
编译软件的原理:把人类可读的代码翻译成为机器可以直接识别的二进制文件 。
我们安装软件时,一定要编译吗?答案是否定的,因为完全可以使用别人编译好的程序直接安装到我们的系统中 。比如常见的windows安装软件的方式就是直接下载别人编译好的二进制文件 。例如,下载最新版的qq安装文件,qq.exe 。
同样的,在Linux上一样可以使用这种方法安装,比如在红帽系列的系统上就可以下载.rpm文件进行安装 。Debian系列的系统就可以在网上下载.deb文件在本地进行安装,比如Ubuntu系统 。
如果需要安装一个软件,其实可以不需要编译,直接使用软件包管理工具安装即可,比如在centos上,安装xxx软件 。
[root@centos7 ~]# yum -y install xx
Linux怎么通过源代码安装软件

文章插图
【Linux怎么通过源代码安装软件】 
Ubuntu系统使用apt命令安装
oucanrong@zcwyou:~$ sudo apt install -y xxx那么问题来了,有这样方便的安装方式,为什么还要费劲去编译一个软件呢?
原因是有以下几种情况需要手动编译软件:
  • 系统默认仓库没有这个软件
  • 系统默认仓库的软件过时或者版本太旧不能满意使用要求,比如在Ubuntu 18.04默认仓库上的youtube-dl,已经过时并不能正常使用 。
  • 软件作者需要发布编译好的二进制包 。
本文演示的案例均在CentOS7.6系统上进行记录 。
编译案例
FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat,libavformat是一个音频与视频格式转换库 。
安装编译工具及ffmpeg的依赖包 。
[root@centos7 ~]# yum install -y automake autoconf libtool gcc gcc-c++ yasm bzip2 make svn git
Linux怎么通过源代码安装软件

文章插图
 
成功安装编译工具
解释:
通用的编辑工具集:
  • make
  • automake
  • autoconf
  • libtool
  • gcc
  • gcc-c++
  • bzip2
  • wget
bzip2用于解压缩bzip2文件
wget用于连接http/https/ftp等协议
ffmpeg本身需要的依赖包,这个需要提前查清楚
  • yasm
远程源码仓库连接工具:
  • svn
  • git
[root@centos7 ~]# wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
Linux怎么通过源代码安装软件

文章插图
 
正在下载最新版本的ffmpeg等待编译
解压压缩包内容:
[root@centos7 ~]# tar jxvf ffmpeg-4.1.tar.bz2解压时可以看到很的.c后缀的文件,表示这是C语言写的程序
进入解压后的目录
[root@centos7 ~]# cd ffmpeg-4.1编辑、编译和安装
[root@centos7 ffmpeg-4.1]# ./configure && make && make install解释以上命令:
./configure表示软件配置,比如编译哪些组件、开启哪些功能、编译成功后安装到哪些目录等等 。
make表示开始编译,把人类可读的代码编译为机器识别的二进制码 。
make install编译成功后,把相关的二进制文件、帮助文件等等内容复制到指定目录 。
编译一般需要比较长时间,类似于以下输出 。
INSTALL libavutil/tree.h
INSTALL libavutil/twofish.h
INSTALL libavutil/version.h
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
INSTALL libavutil/libavutil.pc
Linux怎么通过源代码安装软件

文章插图
 
正在编译最新版的ffmpeg
查看ffmpeg的程序位置
[root@zcwyou ffmpeg-4.1]# which ffmpeg/usr/local/bin/ffmpeg
可以看出,ffmpeg已经编译好了,并且已经复制到了/usr/local/bin/
[root@zcwyou ffmpeg-4.1]# ffmpegffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
configuration:
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100


推荐阅读