当前位置:C++技术网 > 资讯 > 编译器运行-预编译,编译,汇编,链接1

编译器运行-预编译,编译,汇编,链接1

更新时间:2016-01-16 16:36:38浏览次数:1+次

尽管我们用编译器写程序写的呱呱叫,但对于编译器底层的运行大概还是要懂点的。

通常来讲,编译器运行的过程,可以分为:预编译,编译,汇编,链接。
预编译过程通常来讲,是处理那些源代码文件中的以"#"开始的预编译指令。例子就不用我举出来了吧。源代码文件中的.c文件和相关的头文件,被预编译器cpp预编译成(vs)里面是什么?预编译后的文件扩展名是什么?
编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生产相应的汇编代码文件。
汇编器是将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎可以都对应一条机器指令。所以汇编器的汇编过程相对于编译器来讲比较简单,没有复杂的语法,语义,也不需要优化,只是根据汇编指令和机器指令的对照表一一翻译就可以了。编译器将源代码经过预编译,编译,汇编之后输出的是什么文件呢?答案就是目标文件。因为最后一步是链接过程。即将目标文件链接成为可执行文件。(我们认为Object文件没有一个合适的中文名称,把它叫做中间目标文件比较合适,简称目标文件,很多时候,我们也把目标文件成为模块)
从直观的角度来讲,编译器就是将高级语言翻译成机器语言的一个工具。比如,我们用C/C++语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。
最基本的静态链接过程就是将每个模块(此模块不是指目前文件的模块。在我们写的程序中,我们可以将一个程序分为若干个代码块,一个代码块,你就可以看成一个模块)的源代码文件经过编译器链接成为目标文件,目标文件和库一起链接形成最终可执行文件。而最常见的库就是运行时库(Runtime Library),它是支持程序运行的基本函数的集合。
目标文件是一个很重要的文件,里面的结构很复杂,我们不做深究,有兴趣的可以自己研究。
我想你对下面这个图应该能理解了:

原文链接《C++语言零基础入门教程:3.3 链接代码是什么,为什么需要链接,如何链接代码