编译就是讲开发者提供的源代码,通过编译器,汇编器,连接器转换成可以直接在操作系统上运行的二进制指令的过程。C/C++源码的编译通常包括以下几个过程:
预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking)
gcc编译器的大体过程如下图所示:
Linux中源码编译前我们首先需要依赖环境的支持,即编译工具、以及各个被依赖的程序包的开发组件:
1.编译的工具包组有:
Development tools
Server Platform Development
Desktop Platform Development
Debug Tools
2.被依赖的程序包的开发组件:
(1)编译安装被依赖的程序;
(2)安装相关程序的名称中包含devel的子包;
由于源码包中的源码文件存放在多个文件中,彼此之间存在着依赖关系,所以我们需要项目管理工具,相对于C/C++我们通常使用的是GNU make。项目构建工具会根据配置文件(makefile)中定义的次序对源码文件进行编译。
编译安装的过程如下:
1.运行configure脚本
configure脚本的应用:
–prefix:指定默认安装路径
–sysconfdir:指定配置文件安装路径
–with-CAPABLILITY:依赖的程序包
–without-CAPABILITY:不依赖的程序包
–enable-FEATURE:启用某个特性
–disable:禁用某个特性
2.运行make命令,完成项目构建
3.运行makeinstall命令,完成安装
我们以Apache为例进行演示:
经过上述三步,编译安装的基本步骤已经完成,下面我们需要将编译生成的二进制程序文件路径,库文件路径,以及头文件,man帮助手册路径写入系统的环境变量当中: 1).在/etc/profile.d/下建立一个以.sh结尾的文件将/usr/local/apache2/bin路径添加进去。
2).在/etc/ld.so.conf.d下面建立一个以.conf结尾的的文件将库文件路径写进去。并执行ldconfig命令,重新生成库映射缓存ld.so.conf.
[root@localhost ~]# ldconfig
3).将头文件生成软连接到/usr/include中 4).将man手册路径添加到/etc/man.conf当中(CetenOS 6.8)
测试安装是否成功:
[root@localhost include]# apachectl start httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName [root@localhost include]# netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp0 0 0.0.0.0:38326 0.0.0.0:* LISTEN tcp0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp0 0 127.0.0.1:250.0.0.0:* LISTEN tcp0 64 10.1.250.133:22 10.1.250.21:2519ESTABLISHED tcp0 0 :::58111:::*LISTEN tcp0 0 :::111 :::*LISTEN tcp0 0 :::80 :::*LISTEN #80端口已经出现 tcp0 0 :::22 :::*LISTEN tcp0 0 ::1:631 :::*LISTEN tcp0 0 ::1:25 :::*LISTEN
关闭防火墙:
[root@localhost include]# iptables -F
用links浏览器测试:
显示It works表明安装成功,并且服务已经开启。
原创文章,作者:YOUNG,如若转载,请注明出处:http://www.178linux.com/39503