在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装!
我们都知道源码包安装分为这么几个阶段,
1、
Tar:解压这个源码软件包。
2、
Cd:进入到这个源码包。
3、
./configure:“configure”会在你的系统上测试存在的特性(或者bug!)然后来建立Makefile文件来完成make!
4、
Make:编译程序。
5、
Make install:安装文件!
以上五步就是源码包安装软件的步骤,每一步不成功,则下一步就没法去完成!下面我们就找个软件来安装,并且一步一步来解释一下!
我们就那httpd-2.2.11.tar.gz来做例子吧!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1、
Tar:解压这个源码软件包。
![](https://i-blog.csdnimg.cn/blog_migrate/8161aaa3fe61c5b7e037be88c697f2b6.jpeg)
这步没什么好说的,把源码包解压开就好了,接下来第二步!
2、
cd
:进入到这个源码包。
![](https://i-blog.csdnimg.cn/blog_migrate/00c9dfdc734cab2a9681ac37cd853845.jpeg)
现在ls一下mrtg这个目录下多了一个蓝色字体的httpd-2.2.11这个目录,这个目录就是我们刚解压开的,然后cd进入到这个目录下面!如果不进入到这个目录下而是直接
./configure
则会出现下图的提示!
3、
./configure
:
“configure”
会在你的系统上测试存在的特性
(
或者
bug!)
然后
来建立
Makefile
文件来完成
make
!
![](https://i-blog.csdnimg.cn/blog_migrate/54bf5e0cae31cf3a549ac763ff4dc0c0.jpeg)
“configure”脚本有大量的命令行选项,对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的。而我们用的最多的也就是下面这条命令:
./configure --prefix=/
软件要安装的路径
但是我们也可以直接./configure而不指定路径,通常通过从源码包编译安装的软件默认路径都是/usr/local/,如果./configure不成功而直接去make的话,就会出现下图的错误:
![](https://i-blog.csdnimg.cn/blog_migrate/33695116013c14f6974f55de592641ee.jpeg)
当我们解决完
./configure
的错误,然后重新./configure成功后,我们就可以编译程序了!
再说几个能关系到能否编译成功的文件:/etc/ld.so.conf、ldconfig
首先说一下/etc/ld.so.conf,这个文件中记录的编译时使用的动态链接库的路径,默认情况下编译器只会使用/lib和/usr/lib这两个目录下的库文件,如果你安装了其他的库,那么安装完成后就在/etc/ld.so.conf把这个库文件中的绝对路径写进去就OK了。
再来看看ldconfig是个什么东西吧:
他是一个程序,它的作用就是将/etc/ld.so.conf中的路径缓存到/etc/ld.so.cache中,因此在安装完一些库文件或者修改ld.so.conf增加新的路径后需要运行一下/sbin/ldconfig使所有的库文件都缓存都ld.so.cache中,如果没有运行/sbin/ldconfig,即使库文件就在/etc/ld.so.conf中,也是不会被使用的,结果在编译的过程中同样报错缺少XXX库!
4
、
Make
:编译程序。
![](https://i-blog.csdnimg.cn/blog_migrate/31eddd869cc97791b13ecdef9e3b3b45.jpeg)
在编译的时候,
gcc
个版本之间存在着差异,所以有时候用不同版本的
gcc
去编译,有的版本能编译成功,有的就编译失败,这样的错误只是版本问题。
另外在
make
的时候会出现的另一个错就是比较难办的,遇到这样的问题就只能凭经验查找原因,比如说某个头文件没有找到,这个时候就要顺着出错的位置一行一行的往上找,比如显示
XXXXXX.h………no such file or directory
,说明缺少头文件,或者找到你觉得有价值的错误信息去搜索引擎里搜索,从这里可能会找到对你有用的信息,最重要的就是在安装之前仔细的去看
README
、
INSTALL
文件,这两个文件里会告诉你程序应该怎样去安装,需要什么依赖文件等等。
有的时候在编译时不知道是否编译成功,而在没有编译成功就去
make install
肯定会出错,这样就增加了问题的复杂性,俗话说的好“道高一尺魔高一丈”,这样我们可以在
make
结束的时候通过一条命令来检查是否成功编译:
echo $?
![](https://i-blog.csdnimg.cn/blog_migrate/edd8af573a308a247159f418bd2d2157.jpeg)
输入这条命令回车后,输出的结果是
0
,那么就说明成功编译,否则就是出错了,
echo $?
表示检查上一条命令的退出状态,程序正常退出返回
0
!
5、
Make install
:安装文件!
![](https://i-blog.csdnimg.cn/blog_migrate/a21d845a49775a6a025db9f62c206df1.jpeg)
它也从
Makefile
中读取指令,然后安装到指定的位置。
看到上图输出
0
之后我们就可以
make install
来安装了,运行完之后输入
echo $?
检查看看是否有错误,只要输出结果为
0
,那就说明我们的安装成功,我们可以测试一下,把
Apache
的服务起来
/usr/local/apache2/bin/apachectl start
,因为
Apache
的端口是
80
所以我们
netstat -lan | grep 80
来看看
80
端口处于监听状态不:
![](https://i-blog.csdnimg.cn/blog_migrate/5a75863e2f716c412747e05b96b9ba17.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0d7429d9d4e2f32c48b6f5744e0264b1.jpeg)
成功了,说明我们的安装没问题
!
其实
./configure
、
make
、
make install
这三个命令,我们可以用
&&
来把命令连接起来执行,表示当前一条命令正常结束后,后面的命令才会执行,这个办法很好,既节省时间,又可以防止发生错误。例:
./configure && make && make install
转载于:https://blog.51cto.com/wangqiyong/367049