为什么要从源码安装软件
在什么情况之下,我们需要从源代码安装软件呢?我想不外乎这些情形:一种情况是软件放出了新的版本,而所用的发行版并没有及时跟进,这时候,想要尝鲜的话,就非得靠自己不可;另一种情形是不管是软件的开发者,还是现用的系统都没有提供可直接使用的二进制包,而自己又非要使用该软件,那么也需亲自出马才行;当然,还有其他的情形。总而言之,学会从源代码安装软件是一项非常重要的技能。
什么是make 与 configure
make 是一支程序,当执行make 时,make 会在当前目录下寻找 makefile 这个文本文件。 makefile 中定义了源码是如何编译的详细信息,如何调用 gcc对源代码进行编译生成目标文件,如何链接生成可执行文件。
makefile 是如何生成的呢? 通常,软件开发商都会提供一个检测程序来检测用户的操作系统环境,该程序检测完毕之后,就会主动的建立这个makefile 。
准备工作
那么,要如何才能从源代码安装软件呢?首先,你必须要做好为编译源代码所需的准备工作。这包括两个方面:
- 编译工具:要将源代码编译成可执行的二进制文件,编译工具必不可少: gcc , g++ , make , autoconfig 等等。在CentOS系列中,可以通过 yum -y groupinstall "Development Tools" 来安装。在 Ubuntu 中,可以从终端中执行
sudo apt-get install build-essential
指令来安装基本的编译工具。根据所编译程序的实际情况,你也可能需要安装其他一些工具。 - 编译依赖:除了安装基本的编译工具之外,为了顺利编译源代码,我们也要把该程序所需要的依赖安装好。包含系统提供的库函数, 以及第三方软件的依赖包。在CentOS系列中,可以通过 yum -y install xxxx xxxx-devel 来安装相应的依赖包。Ubuntu 系统可以通过
sudo apt-get build-dep
命令后跟包名的方式来准备所需的依赖。一般情况下,如果 configure 或者 make 报错,其报错信息都明确的指出缺少依赖,只需按要求做即可。或者把错误信息复制到 google 一下,即可愉快的解决。
源码安装3部曲: ./configure ; make && make install
在编译源代码之前,你一定把软件的源码包下载到了自己的硬盘上吧。一般而言,程序源码包经常被打包成 .tar.gz 和 .tar.bz2 这两种格式。前者可用 tar zxvf *.tar.gz
来解包,后者则用 tar jxvf *.tar.bz2
。通常情况建议解压到 /usr/local/src 目录: # tar xf *.tar.gz -C /usr/local/src
通常,在解包后,我们应该阅读程序附带的相关说明文件,如 README(自述文件)、INSTALL(安装文件)等,以便了解程序的编译介绍。这一步超级重要!!!
当所有的事情都准备妥当了后,那么让我们来进行源代码编译的三部曲吧。
- 配置,建立makefile文件:这是编译源代码的第一步,通过
./configure
命令完成。执行此步以便为编译源代码作准备。常用的选项有--
prefix=PREFIX,用以指定程序的安装位置。更多的选项可通过 --help 查询。也有某些程序无需执行此步。 - 编译:一旦配置通过,可即刻使用
make
指令根据makefile的定义,调用 gcc 来执行源代码的编译过程。视软件的具体情况而定,编译所需的时间也各有差异,我们所要做的就是耐心等候和静观其变。此步虽然仅下简单的指令,但有时候所遇到的问题却十分复杂。较常碰到的情形是程序编译到中途却无法圆满结束。此时,需要根据出错提示分析以便找到应对之策。需要执行 make clean , 然后再重新执行 make 指令。 - 安装:如果编译没有问题,那么执行
make install
就可以将程序安装到系统中了。
需要注意的是:上面的步骤必须一步一步的进行,只要其中的一个步骤无法成功,那么后续就完全没有办法再进行。
管理:目录规划,卸载,升级
- 源码通常解压到 /usr/local/src 目录
- 安装时最好安装在 /usr/local 目录
- 将 软件的 man page 加入 man path 中, 编辑 /etc/man.config ,增加 MANPATH 项。
- 把软件的 bin 目录加入到 PATH 环境变量, 编辑 /etc/profile.d/xxxx.sh, 增加 export PATH=$PATH:/usr/local/xxx/bin
若是觉得所编译的软件不够适用想要删除,又如何做呢?我们只需转到编译源代码的目录,执行 sudo make uninstall
命令。