一、为什么需要编译安装
自定义软件的功能开启或关闭某些没有用的模块
优化编译参数,提高软件的可用性
解决不必要的软件依赖
也能够保证软件的安全性
二、编译安装HTTPD提前的准备
httpd 的一个源码包,这里选择2.2的依赖性较少,为了演示过程
使用bz2 工具解压缩至文件夹,这里就解压到当前文件
tar jxvf ./httpd-2.2.25.tar.bz2
这里是这个文件夹下面的所有文件
开发环境的准备
gcc 编译器
gcc 编译器装会有多包的依赖关系,建议配置好yum 仓库,然后直接安装或yum groupinstall Development tools
三、译细安装过程
cd ./httpd-2.2.25
安装前要注意查看帮助,每个源码包的安装过程可能都会不同,但是大体的框架还是没有变得。一般而言先查看REAME或者INSTALL 文档
提示默认安装路径为 /usr/local/apache2,也可以手动指定安装目录,或者打开禁用某个模块功能等,这些配置要在执行 configure 中去指定,详细格式可以--help 查看一下
安装步骤
configure -->是用来检测你的安装平台的目标特征、并定义当前程序编译时启用哪些功能特性。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。会根据automake 的makefile.in文件生成makefile文件,供下一步的make去调用,makefile 文件是make 工具的配置文件
configure脚本选项的配置内容基本上分成9块内容,分别是:
配置区【Configuration】
程序安装目录区【Installation directories】
程序名称区【Program names】
系统类型区【System types】
可选特性区【Optional Features】
可选安装包区【Optional Packages】
影响安装的环境变量区【Some influential environment variables】
其他信息
介绍一些大家在编译过程中常用的一些选项
--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
make--> 是 Linux开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用gcc、ld 以及运行某些需要的程序进行编译的程序。一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。
makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件
make install -->用来安装程序,install并不是make 的一个参数,而是makefile中的语句,你使用make install 那么就执行了install:后面的语句。这一步一般需要你有 root 权限(因为要向系统写入文件),执行过程也就像在执行CP,把各种文件根据指定的目录选项安装到指定目录
四、安装使用
按照上面的步骤你已经安装好了httpd ,可以去你的自定目录下面看一下。这里是/usr/local/apache2 目录
但是怎么使用呢?每次都要在这个目录中去执行吗??如果需要查看帮助??或是另一个程序与此程序有依赖性需要调用程序的库呢??或是程序员的二次开发呢??
所以我们还需要
设置环境变量
程序头文件、库的配置
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 两个目录,对于处于默认库搜索路径之外的库,需要将库的位置添加到默认的路径之外。有以下两种方式:
在环境变量LD_LIBRARY_PATH中指明库的搜索路径
export LD_LIBRARY_PATH=/usr/local/apache2/lib:$LD_LIBRARY_PATH
在/etc/ld.so.conf.d文件中添加库的搜索路径
echo "/usr/local/apache2/lib" > /etc/ld.so.conf.d/httpd
注意:这样做是不够的,Linux 为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库,降低库的查找速度,所以是直接读取库文件上列表的二进制文件/etc/ld.so.cache,它是一个非本的数据文件,不能直接编辑,是根据/etc/ld.so.conf中设置的搜索路径然后通过/sbin/ldconfig 命令把这些搜索路径下面的共享库文件集中在一起而生成的cache。所以即使你添加完了路径,在程序调用时并不会立即生效,它只会读取cache 的文件。只有用管理员命令 ldconfig 使之生效
MAN手册页的配置:
MAN 手册的配置与库文件的配置相似只需要在/etc/man.config 增加相应的手册页的路径就可成功查找
增加:
MANPATH /usr/local/apache2/man
五、程序卸载
因为程序是选择用源码编译安装,所以不能用RPM 包管理的操作执行查询、卸载。
最简单的办法就是直接删除文件所放置的路径,这点与windows 很大不同,不用去考虑什么注册表一类的,它只是简单的二进制程序的加载执行而已
可以注意一下make 后的包里面有没有uninstall 有的话执行 make uninstall ,其原理也是与上述步骤一样,只是把install 里面的各种cp 变成了rm ,删除了程序所在的路径等