php发展

首页 » 常识 » 常识 » 说一说编译器的工作过程
TUhjnbcbe - 2021/5/18 18:14:00
北京手足癣医院地址 http://m.39.net/baidianfeng/a_8604561.html

当源程序代码编写好后,就是要编译运行,这必须先将它转成二进制的机器码,这样机器才能”认识“,这一些列整个都是我们编译器的任务。

比如,有下面这段程序源码(这里文件名是test.c)。

#includestdio.hintmain(void){fputs("Hello,world!\n",stdout);return0;}

我们要先用编译器去处理一下,也就是要先编译,才能运行。

$gcctest.c$./a.outHello,world!

对于一些复杂的项目工程,编译器编译的过程还必须分成三步。

$./configure$make$makeinstall

这么多的命令到底在干什么?在大多数的书籍和资料,都语焉不详,只说这样就可以编译了,没有进一步的解释它们的所以然来。

本文将介绍一下编译器的工作过程,也就是上面这三个命令各自的任务什么,如何式作的。我主要参考了AlexSmith的文章《BuildingCProjects》。这里需要声明的是,本文主要针对gcc编译器来介绍,也就是针对C和C++这两种语言,不一定适用于其他语言的编译,但大的道理是相通的。

第一步配置(configure)

编译器在开始工作之前,它首先需要知道当前的操作系统环境,比如标准库存储在哪里(通常会用环境变量指向)、软件的安装路径位置在哪里(比如/opt/test文件夹下面,这是Linux、MAC系统下的路径写法,Windows下可能是C:\programfiles\test)、需要安装哪些组件等等。这是因为不同计算机的操作系统环境不一样,通过指定了编译参数后,编译器就可以灵活适应环境,编译出各种环境都能运行的机器码(二进制编码)。这个确定编译参数的步骤,就叫做"配置"(configure)。通常会在具体的配置文件里指定所需的参数,有时也可直接跟在命令的后面(configure--prefix=xxxxxxx)

这些配置信息都保存在一个配置文件之中,约定俗称是一个叫做configure的脚本文件。通常它是由autoconf工具自动生成的。编译器通过运行这个脚本,获知编译参数。这里autoconf也是一个工具,非常强大,它可以对项目工程中的代码进行组织,生成一个配置脚本文件。

在configure脚本中,它已经尽量考虑到不同系统之间的差异,并且对各种编译参数给出了默认值。如果用户的操作系统环境比较特殊,或者有一些特定的需求,就需要手动向configure脚本提供编译参数,或者修改参数。

$./configure--prefix=/

1
查看完整版本: 说一说编译器的工作过程