为什么要进行应用程序源代码的编译安装?
1.对应应用程序的程序包不能直接获取到;
2.在已经编译好的二进制格式的程序的功能不包含我们所需要的;
3.在已经编译好的二进制格式的程序中,包含太多的我们所不需要的功能;
软件项目管理工具:
C/C++:make
Makefile
应用程序源代码的分类:
1.由程序员直接打包的源代码
name-VERSION.tar.gz
2.由第三方利用rpm工具制作的rpm源代码包:
name-VERSION-release.src.rpm
源代码的组织形式:
1.一个应用程序包含多个文件;
2.某个文件中的不同的代码段之间,甚至不同文件的代码段之间都可能存在依赖关系;
应用程序源代码的编译过程:
源代码 --> 预处理(预处理器,CPP) --> 编译(编译器,CC[gcc]) --> 汇编(汇编器) --> 链接(链接器) --> 用于执行操作的二进制程序文件
Makefile文件的功能:
1.包含了各个程序源代码文件之间的关系;
2.决定文件的编译顺序;
3.使用哪个预处理器进程何种预处理操作;
4.使用哪个编译器进程何种编译操作;
...
程序员通过使用专用工具,对于所有的源代码文件进行内容的分析和提取,并构建出一个同一的makefile文件的绝对模板,即:Makefile.in
有了这个模板,用户可以根据自己的需求,自行构建Makefile文件,从而可以实现个性化的编译过程;帮助用户生成Makefile文件的是一个名为"configure"的脚本;
开发工具:
autoconf:帮助用户生成configure脚本文件;
automake:帮助用户生成Makefile.in的模板文件;
建议:在获取任何源代码包并解压缩之后,要去读取其中随程序源代码提供的"INSTALL"或"README"类的文档文件,以获知该应用程序源代码的编译步骤;
开源应用程序的源代码的获取方式:
1.官方自建的资源站点:
apache.org(ASF)
MariaDB --> mariadb.org
varnish-cache.org
...
2.代码托管站点:
SourceForge
Github
code.google.com
Linux中进行C/C++源代码编译时使用的编译器:gcc,GNU C Compiler
在使用NAT模式联网进行软件包的安装的时候如果出现/var/run/yum.pid 已被锁定,PID 为 4040 的另一个程序正在运行等相同问题,则~]# rm -f /var/run/yum.pid
在执行安装命令~]# yum install gcc
编译源代码所需的开发环境:(程序包组)
CentOS 7:
Development Tools
Compatibility Libraries
CentOS 6:
Development Tools
Server Platform Development
注意:程序包组中所包含的开发环境并不是非常完整,如果某个应用程序在编译时有其他环境要求的话,需要安装对应应用程序的开发工具包;
如果有rpm格式的开发工具包,其名称为name-devel-VERSION-release.rpm,则可以使用yum直接安装;
如果没有对应的rpm格式的开发工具包,则需要优先编译安装开发工具;
编译源代码安装应用程序的三大步骤:
1.利用configure脚本生成Makefile文件;
~]# ./configure [option]...
--help
--prefix:选择程序安装的路径;
--enable-function:
--with-function:
2.使用项目管理工具"make"进行编译;
注意:有一些应用程序在实施编译操作之前需要测试(make test)
3.使用"make install"命令进行编译后的二进制文件的最后的安装;
编译安装完成以后的收尾工作:
1.导出二进制文件的路径;
2.导出库文件路径;
3.导出头文件路径(可选);
4.导出帮助文件路径;
尝试编译安装httpd:(这些安装包首先要事先存在于你的系统内存当中,如果没有可以到相关网站进行下载)
1.安装apr
~]# tar xf apr-1.5.2-tar.bz2
~]# cd apr-1.5.2
~]# ./configure --prefix=/usr/local/apr-1.5.2
~]# make [-j 4]
~]# make install
2.安装apr-util
~]# tar xf apr-util-1.5.4-tar.bz2
~]# cd apr-util-1.5.4
~]# ./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2
~]# make [-j 4]
~]# make install
3.安装httpd
~]# tar xf httpd-2.4.29-tar.bz2
~]# cd httpd-2.4.29
~]# ./configure --prefix=/usr/local/apache-2.4.29 --with-apr=/usr/local/apr-1.5.4 --with-apr-util=/usr/local/apr-util-1.5.4 --with-pcre
~]# make [-j 4]
~]# make install
注:因为需要pcre的支持,所以需要事先安装pcre-devel包;
收尾工作:
1.导出二进制文件:
创建一个文件:/etc/profile.d/httpd.sh
export PATH=/usr/local/apache-2.4.29/bin:$PATH
2.导出库文件:
创建一个文件:/etc/ld.so.conf.d/httpd.conf
/usr/local/apache-2.4.29/lib64
3.导出头文件;
创建符号链接:
~]# ln -sv /usr/local/apache-2.4.29/include /usr/include/httpd
4.导出帮助文档:
对于CentOS7来说,在导出二进制文件时已经自动导出了帮助文档;如果没有成功导出,则需要在/etc/man_db.conf文件中添加一行:
MANPATH_MAP=/usr/local/apache-2.4.29/bin /usr/local/apache-2.4.29/man
对于CentOS6来说,需要手动导出:
在/etc/man.config中添加一行:
MANPATH=/usr/local/apache-2.4.29/man
原文:http://blog.51cto.com/huliheeyu/2096258