下面来简述一下C++
.cpp
文件转换为
.exe
文件的过程。
我们知道当我们用C++编译器编辑一个文件时,这个文件就是一个扩展名为
.c
或
.cpp
文件,而当我们进行编译运行之后,编译器会为我们自动生成一个扩展名为
.exe
文件。那么这个过程是怎样的呢?接下来我们来解析这样一个过程。
首先我们来看图解。
过程解析如下:
(一)预处理阶段。首先我们会对我们编辑得到的源代码(即扩展名为.
c/.cpp
文件)通过预处理器进行预处理,这一部分是由我们的编译器帮我们完成的。预处理器做的事情就是将原始源文件中的所有预处理器指令替换为暗示指令的实际库代码。那么什么是预处理指令呢?实际上这些是我们在代码很常见的,如
#include
和
#define
指令。之后,生成的文件基本上被取代并获得扩展名为.
i
文件。
(二)编译器编译阶段。接下来是编译器的处理阶段,这个阶段是把高级语言翻译成低级语言的过程,也负责检查源代码的语法/语法。若发现无误,则会将文件转换为扩展名为.
s
的文件,即我们所知的汇编代码。
(三)目标文件转换阶段。得到汇编文件之后,要对其进行转换,即该过程是将汇编级语言转换为机器级语言(一般为二进制格式),此时生成的文件就是我们的目标文件,扩展名为
.o
或
.obj
。
(四)链接阶段。C++语言支持分离式编译(这里指的编译是指上面(一)至(三)阶段)机制的,该机制允许将程序分割为若干个文件,每个文件可独立编译。那么多个已编译的文件如何合并呢?答案就是在此阶段。该阶段通过链接器将一个或多个目标文件合并到一个可执行文件,即将扩展名为
.obj
/
.o
文件转换为扩展名为
.exe
文件。
以上的四个阶段就是
.cpp
文件转换为
.exe
文件的过程。
注:我们平常所说的“编译”是一个整体,即包括预处理,编译和汇编三个阶段。它在这些步骤中基本上将高级语言转换为机器级语言,并生成单个二进制对象文件。若编译(但不链接)三个单独的文件,则将创建三个作为输出的目标文件。