首页 > 代码库 > linux软件包的安装之----源码编译安装

linux软件包的安装之----源码编译安装

前提:必须装好前面说过的开发环境,rhel6上的3个开发包组

 

Rhel5/centos5上面安装:

1Development Tools (2)Server Platform Development (3)Develogmentlibraries

Rhel6/centos6上面安装:

1)  Development Tools (2)Server Platform Development (3)Desktop PlatformDevelopment

 

**由于tarball中的c程序源码文件之间有依赖关系,因此我们不便于用gcc手工编译,因为我们编译必须按照特定的顺序进行,否则安装就会失败。

 

**make命令:通过一个配置文件(专用于make的,源码目录下的Makefile,一般由configure脚本生成)来调用gcc等编译指令来完成一个软件工程/软件项目的编译。

Makefile文件:指定了要使用gcc先编译哪个文件[中的哪个片段],编译完成此文件后再编译哪个文件,编译过程中使用什么参数进行优化。

configure脚本:用于生成Makefile文件,此脚本可以结合同一目录下的Makefile.in文件来生成Makefile configure脚本一般由开发人员通过automake命令生成。

 

编译安装的一般步骤:

 

#cd Source_code/

#./configure  

运行目的:(1)检查系统编译环境,所需的编译器、头文件、库文件等是否完备。

2)接受用户指定编译配置选项,其中较常用的选项如下:

--help 获取帮助列表

--prefix 指定程序安装的目录 ----(例httpd程序)程序的二进制文件都在此目录下的binsbinlibexec(此目录下文件只能由其他程序调用执行)目录。

--sysconfdir 指定程序配置文件的安装目录

--mandir            指定程序帮助文件的安装目录

这一步的执行过程记录在当前目录下的config.log中,并且已经生成Makefile文件,若这一步执行没有任何错误,则进行下一步。

#make

开始根据Makefile文件编译源代码,可以指定使用的编译器(如iccgcc

若这一步执行没有任何错误,则进行下一步。

#make install

就是将你编译好的文件放到你指定的目录中去

安装后二进制文件位置为:/--prefix指定的目录/bin

                                               /--prefix指定的目录/sbin

                                               /--prefix指定的目录/libexec(此目录下文件只能由其他程序调用执行)

安装后库文件位置为:/--prefix指定的目录/lib

安装后配置文件位置为:/--prefix指定的目录/conf

安装后帮助文件位置为:/--prefix指定的目录/[share]/man

安装后头文件位置为:/--prefix指定的目录/include

 

 

 

 

***安装后要修改的各个搜索路径如下

1)  修改命令搜索路径的值:PATH,将二进制文件的目录包含进去。

例:vi /etc/profile.d/apache.sh  输入

export PATH=/usr/local/apache/bin:$PATH

:x #source /etc/profile.d/apache.sh

#hash –d(清空hash缓存)

#apachectl  start#hash(查看命令调用路径)

2)  修改库文件搜索路径的值:(每一个程序的运行都要依赖于库文件的,尤其是apache的开发库以及程序运行依赖的库都在/--prefix指定的目录/lib下,我们可以通过ldd命令查看二进制程序所依赖的库文件名称及其所在的路径,这些库文件找不到的话二进制程序就无法正常运行(会报错!))

***库文件的搜索路径的修改在配置文件/etc/ld.so.conf/etc/ld.so.conf/*.conf文件(/etc/ld.so.conf文件会包含这些文件,可以自己新建一个文件,以.conf为后缀,把新增的库文件路径写进去即可)中。

***ldconfig命令让系统根据配置文件/etc/ld.so.conf/etc/ld.so.conf/*.conf文件重新搜索当前系统上的每一个库文件,并生成缓存文件/etc/ld.so.cache,系统通过这个缓存文件来寻找库文件,因此我们每新加一个库文件路径就必须让这个缓存文件重新生成。

 

实例:#vi /etc/ld.so.conf.d/apache.conf 输入

/usr/local/apache/lib

:x保存退出

#ldconfig  -v(让缓存文件/etc/ld.so.cache重新生成,并显示生成缓存的过程,哪个目录下有哪些库文件!)

#ldconfig -v|grep  /usr/local/apache/

#ldconfig  -v|less

3)导出man文件(配置文件不需要被导出):导出/--prefix指定的目录/下的man目录,即man1,man8目录的父目录,帮助文件搜索路径在配置文件:/etc/man.config中,加一行MANPATH    ”……程序帮助文件所在路径……….”即可

例:#vi  /etc/man.config 找到MANPATH关键字,加一行

MANPATH /usr/local/apache/man                :x保存退出

#man  httpd

***如果不确定是否为对应版本程序的apache帮助文件,可以用命令指定帮助文件的搜索路径

#man  -M  /usr/local/apache/man  httpd

  • 头文件导出(可以使用软链接,将程序头文件目录链接至系统头文件目录:/usr/include

实例

#ln  -sv  /usr/local/apache/include  /usr/include/httpd

也可以单独链接但是不便于管理!# ln  -sv  /usr/local/apache/include/*  /usr/include/

#ldd /usr/local/apache/bin/httpd(若程序转移至其他系统上,缺少依赖的库文件是无法运行的)

 

*****至此源码安装完成!!!

实例:linux下支持多线程、断点续传的下载工具axel

#查看readme

#./configure  --help

#./configure –prefix=/usr/local/axel 

#make &&  make  install

#man –M / usr/local/axel/share/man  axel

#/ usr/local/axel/ -n 5(5个下载线程)  -o  /root(下载到/root目录)  ftp://......./....iso

支持断点续传,终止它重新下载试试!


本文出自 “就让我更饿一点” 博客,请务必保留此出处http://ufirst.blog.51cto.com/7628670/1432603