首页 > 代码库 > linux软件包的安装之----源码编译安装
linux软件包的安装之----源码编译安装
前提:必须装好前面说过的开发环境,rhel6上的3个开发包组
Rhel5/centos5上面安装:
1)Development 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程序)程序的二进制文件都在此目录下的bin、sbin、libexec(此目录下文件只能由其他程序调用执行)目录。
--sysconfdir 指定程序配置文件的安装目录
--mandir 指定程序帮助文件的安装目录
这一步的执行过程记录在当前目录下的config.log中,并且已经生成Makefile文件,若这一步执行没有任何错误,则进行下一步。
#make
开始根据Makefile文件编译源代码,可以指定使用的编译器(如icc,gcc)
若这一步执行没有任何错误,则进行下一步。
#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