linux源码包编译安装软件详解
./configuremakemake install源码安装三部曲,一直在使用却一直知其然不知其所以然,今天就说说所以然。源码到成为可运行程序经历了一下步骤源码–>预处理–>编译–>汇编–>链接–>执行make就做了编译汇编的工作,当然也也不是随随便便就干活的,要有依据,那他是根据什么干活的呢?根据一个叫makefile的文件。那么makefile哪来的呢?configure生成的
./configure
make
make install
源码安装三部曲,一直在使用却一直知其然不知其所以然,今天就说说所以然。
源码到成为可运行程序经历了一下步骤
源码–>预处理–>编译–>汇编–>链接–>执行
make就做了编译汇编的工作,当然也也不是随随便便就干活的,要有依据,那他是根据什么干活的呢?根据一个叫makefile的文件。那么makefile哪来的呢?configure生成的。现在指定为什么make之前要执行./configure了吧。
configure也是个懂规矩的孩子,他也不会乱生成的,他会根据一个叫做Makefile.in的模板文件生成makefile。
问题又来了,makefile.in哪来的呢?当然是由一个叫automake的工具生成的。configure哪来的啊。他是由一个叫autoconf的工具生成的。
make install干了写什么呢,其实他就干了一个工作,把编译好的文件复制到指定的目录。说到底就是调用了install命令。可以自己去搜一下install命令,这个是个拷贝命令。
下面我们来总结一下整个编译安装的过程经历了什么。
在发布源码包前开发人员用automake生成makefile.in,用autoconf生成configure脚步
然后我们拿到的源码包,里面有源码、makefile.in文件、configure脚步。
我们执行./configure根据自己的配置和makefile文件中的配置进行结合,处理依赖包的关系,生成makefile文件
执行make命令根据makefile的信息,调用编译工具,可能是gcc也可能是其他编译器,对源码进行编译
执行make install将编译后生成的文件复制到指定位置。
整个编译完成。
这样就可以用了吗?可以。
但是貌似启动起来好麻烦,得切换到安装的目录的bin目录下,要是能直接在命令行的任何路径下都能管理启动或是关闭就好了,你还要对一些执行文件做软连接,添加环境变量,设置启动服务等,要不然你每次都要到程序的安装目录去执行这是多么痛苦的事啊。 (以apache为例):
- 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/httpd2.2.sh文件,在文件中写入下边一行即可;(注意,httpd2.2.sh文件并不存在,创建即可)
export PATH=/root/test/httpd2.2/bin
保存退出,要让此设置即刻生效,需要在当前目录下执行命令
source httpd2.2.sh
现在我们就可以在系统的任何路径下打开或关闭httpd服务了,而不用记住那一长串的路径了 - 导出库文件路径;
编辑/etc/ld.so.conf.d/httpd2.2.conf; 注意:httpd2.2文件不存在,需自行创建
添加新的库文件所在目录至此文件中;
/root/test/httpd2.2/lib
让系统重新生成缓存:
ldconfig [-v]
-v查看详细内容 - 导出头文件(可以将目录建立一个符号链接,或者所有头文件每一个文件都建一个)
基于链接的方式实现:
ln -sv /root/test/httpd2.2/include /usr/include/httpd2.2 - 导出帮助手册
编辑/etc/man_db.conf文件,加入一个MANPATH; 注意:centos6.x系列中为/etc/man.config文件
执行 man apachectl 试试看
至此,编译安装的工作完成,赶紧动手试试哇!
configure脚步配置选项说明
安装路径设定
–prefix=path/to/dir 指定默认安装路径
–sysconfdir=path/to/dir 配置文件安装位置
System types:
Optional Features:可选特性
–disable-feature 禁用某特性
–enable-feature[=age] 启用某特性
Optional PACKAGES:可选包
–with-package[=package] 依赖的包
–without-package 不需要的包
更多推荐
所有评论(0)