CentOS程序包管理器之编译安装
为什么要进行源代码编译安装?
1.对应的程序包并不能直接获取到;
2.已经编译好的二进制中,尚不包含我们所需要的功能;
3.已经编译好的二进制中,包含的功能太多,我们并不需要;
源代码包有两种:
由程序员直接打包的源代码:name-VERSION.tar.gz
由第三方利用rpm工具制作的rpm源代码包:name-VERIONS-release.src.rpm
/usr/src/name-VERIONS
源代码的组织形式:
1.多文件组成
2.文件中的代码之间,甚至是不同文件的代码段之间都可能存在依赖关系;
源代码的项目管理工具:
C/C++项目管理工具:make
Java项目管理工具:maven
源代码 --> 预处理(预处理器,cpp) --> 编译(编译器,gcc) --> 汇编(汇编器) --> 链接(链接器) --> 用于执行操作的二进制文件
针对于每个需要编译的源代码文件,都可能会有一个或多个被他依赖的文件或他所依赖的文件,这样的信息会被保存到一个配置文件中;这个配置文件会告诉我们:
1.调用哪个预处理器,如何进行预处理;
2.调用哪个编译器,如何进行编译;
3.文件的编译顺序等等;
这类文件一般是makefile,这样的makefile文件并不是事先存在的,也不是对所有用户的需求都一视同仁的;
程序员可以使用专用的工具,来对于所有的源代码文件进行内容分析和抽取,构建出makefile文件,所有的makefile文件都有一个统一的模版——Makefile.in
用户可以根据自己的需要,自行构建makefile文件,从而实现能够满足自己需求的编译过程
帮助用户生成makefile文件的通常是一个名为configure的脚本文件;
开发工具:
autoconf:帮助用户生成configure脚本
automake:帮助用户生成Makefile.in的模版文件
建议:任何的源代码包,在解压缩之后,都会提供INSTALL或README的文档文件,我们在编译操作之前,最好先查阅此类文件的内容, 以确定编译过程;
开源程序的源代码的获取方式:
1.官方自建的站点:
apache.org(ASF)
mariadb.org
...
2.代码的托管站点
SourceForge
Github
code.google.com
需要使用编译器:gcc (GNU C Complier)
开发环境的安装:
CentOS7:
1.yum groups install "开发工具"
yum groups install "Development Tools"
CentOS6:
yum groupinstall "Development Tools" "Server Platform Development"
"Desktop Platform Development"
2.yum install make automake autoconf gcc glibc qt ncurses
通常来讲,Linux系统中的编译安装程序的三大步骤:
1.configure [options...]
2.make
3.make install
第一步:
./configure [options...] [VAR=VALUE]...
常用选项分类:
1.安装路径的设定:
--prefix=/PATH/TO/SOMEWHERE
指定默认的程序安装路径,如果不给该选项,默认路径/usr/local/
--sysconfdir=DIR
指定配置文件的安装路径
2.系统类型:
3.可选特性:
--disable-FEATURE
在编译过程中禁用某种特性或功能
--enable-FEATURE[=ARG]
在编译过程中启用某个特性或功能
4.可选程序包:
--with-PACKAGE[=ARG]
在编译过程中,选择使用额外的程序包
--without-PACKAGE
在编译过程中,不使用额外的程序包
第二步:
make
第三步:
make install
编译收尾工作:
/usr/local/apache2里面会包含bin, sbin, etc, lib, lib64, include, man, ...
1.导出二进制文件:
创建一个文件: /etc/profile.d/httpd.sh
export PATH=/usr/local/apache2/bin:/usr/local/apache2/sbin:$PATH
2.导出库文件:
创建一个文件:/etc/ld.so.conf.d/httpd.conf
/usr/local/apache2/lib64
ldconfig [-v]
3.导出头文件:
在/usr/include目录中,为编译安装的软件创建头文件的符号链接:
ln -sv /usr/local/apache2/include /usr/include/httpd
4.导出帮助文件:
CentOS6: /etc/man.config
新添加一行:MANPATH=/usr/local/apache2/man
CentOS7: /etc/man_db.conf
新添加一行:MANPATH_MAP=/usr/local/apache2/bin /usr/local/apache2/man