一、为什么需要编译安装

  1. 自定义软件的功能开启或关闭某些没有用的模块

  1. 优化编译参数,提高软件的可用性

  1. 解决不必要的软件依赖

  1. 也能够保证软件的安全性


二、编译安装HTTPD提前的准备

  1. httpd 的一个源码包,这里选择2.2的依赖性较少,为了演示过程

wKioL1MRavKTLC_3AABRDEIy-C4939.jpg

  1. 使用bz2 工具解压缩至文件夹,这里就解压到当前文件

tar jxvf ./httpd-2.2.25.tar.bz2

这里是这个文件夹下面的所有文件

wKiom1MRazaT0RzuAAIa1lEdx_I223.jpg

  1. 开发环境的准备

gcc 编译器

gcc 编译器装会有多包的依赖关系,建议配置好yum 仓库,然后直接安装或yum groupinstall Development tools



三、译细安装过程

  1. cd     ./httpd-2.2.25

  1. 安装前要注意查看帮助,每个源码包的安装过程可能都会不同,但是大体的框架还是没有变得。一般而言先查看REAME或者INSTALL 文档

wKioL1MRayOSoxYOAAFa4SgDvEU389.jpg


提示默认安装路径为 /usr/local/apache2,也可以手动指定安装目录,或者打开禁用某个模块功能等,这些配置要在执行 configure 中去指定,详细格式可以--help 查看一下

  1. 安装步骤

configure -->是用来检测你的安装平台的目标特征、并定义当前程序编译时启用哪些功能特性。比如它会检测你是不是有CCGCC,并不是需要CCGCC,它是个shell脚本。会根据automake makefile.in文件生成makefile文件,供下一步的make去调用,makefile 文件是make 工具的配置文件

configure脚本选项的配置内容基本上分成9块内容,分别是:

  1. 配置区【Configuration

  1. 程序安装目录区【Installation     directories

  1. 程序名称区【Program names

  1. 系统类型区【System types

  1. 可选特性区【Optional Features

  1. 可选安装包区【Optional Packages

  1. 影响安装的环境变量区【Some     influential environment variables

  1. 其他信息

介绍一些大家在编译过程中常用的一些选项

--prefix=/PATH :后面跟你要安装的路径,一般情况下个人安装的工具可以安装在/usr/local里面

--bindir=DIR :指定二进制文件的安装位置,这里的二进制文件定义为用户可直接执行的程序

--libexecdir=DIR指定可执行支持文件的安装位置。与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行。

--libdir=DIR :指定库文件的安装位置

--mandir=DIR :指定手册页安装位置

--host=HOST :指定软件的运行系统平台,如果没有指定,将会运行`config.guess`

--enable-feature/--diable-feature :启用或者禁用某种特性

--without--function/--with-function:指启所依赖功能、程序或文件

注意:不同的程序,其configure脚本功能不同,要获取帮助:./configure --help

我这里安装就不指路径了启用默认路径:./configure


wKiom1MRa1qjwgO8AAJFKRuOoB8441.jpg

make-->Linux开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用gccld 以及运行某些需要的程序进行编译的程序。一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。

makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件


wKioL1MRa1eAsmc6AAZIZrPbPVQ406.jpg


make install -->用来安装程序install并不是make 的一个参数,而是makefile中的语句,你使用make install 那么就执行了install:后面的语句。这一步一般需要你有 root 权限(因为要向系统写入文件),执行过程也就像在执行CP,把各种文件根据指定的目录选项安装到指定目录



四、安装使用

按照上面的步骤你已经安装好了httpd ,可以去你的自定目录下面看一下。这里是/usr/local/apache2 目录

wKiom1MRa52RFIlKAACvZ4vWxBg618.jpg

但是怎么使用呢?每次都要在这个目录中去执行吗??如果需要查看帮助??或是另一个程序与此程序有依赖性需要调用程序的库呢??或是程序员的二次开发呢??

所以我们还需要

  1. 设置环境变量

  1. 程序头文件、库的配置

  1. MAN 手册页的正确配置


设置环境变量:

echo "export PATH=/usr/local/apache2/bin:$PATH"  >> /etc/profile.d/httpd.sh


头文件及库文件的设置

头文件

linux 下标准头文件都放置在/usr/include,这里做个软链接就OK

mkdir /usr/include/httpd.h

ln -s /usr/local/apache2/include/* /usr/inclucde/httpd.h


库文件:

linux 在搜索库文件时默认是以/lib/usr/lib 两个目录,对于处于默认库搜索路径之外的库,需要将库的位置添加到默认的路径之外。有以下两种方式:

  1. 在环境变量LD_LIBRARY_PATH中指明库的搜索路径

export LD_LIBRARY_PATH=/usr/local/apache2/lib:$LD_LIBRARY_PATH

  1. /etc/ld.so.conf.d文件中添加库的搜索路径

echo "/usr/local/apache2/lib" > /etc/ld.so.conf.d/httpd

wKiom1MRa66QONyFAADwv3jnUag058.jpg

注意:这样做是不够的,Linux 为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库,降低库的查找速度,所以是直接读取库文件上列表的二进制文件/etc/ld.so.cache,它是一个非本的数据文件,不能直接编辑,是根据/etc/ld.so.conf中设置的搜索路径然后通过/sbin/ldconfig 命令把这些搜索路径下面的共享库文件集中在一起而生成的cache。所以即使你添加完了路径,在程序调用时并不会立即生效,它只会读取cache 的文件。只有用管理员命令 ldconfig 使之生效

MAN手册页的配置:

MAN 手册的配置与库文件的配置相似只需要在/etc/man.config 增加相应的手册页的路径就可成功查找

wKiom1MRa7vjCkKBAAF8wX2EFwk284.jpg


增加:

MANPATH /usr/local/apache2/man


五、程序卸载

因为程序是选择用源码编译安装,所以不能用RPM 包管理的操作执行查询、卸载。

  1. 最简单的办法就是直接删除文件所放置的路径,这点与windows 很大不同,不用去考虑什么注册表一类的,它只是简单的二进制程序的加载执行而已

  1. 可以注意一下make 后的包里面有没有uninstall 有的话执行 make uninstall 其原理也是与上述步骤一样,只是把install 里面的各种cp 变成了rm 删除了程序所在的路径等