CentOS程序包管理(3)
应用程序的编译安装(C/C++)

为什么要进行应用程序源代码的编译安装?
    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