C++编译器和连接器原理
本文转载自新浪永远即等待的博客 几个概念: 1、编译 :编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过, 就会把对应的CPP转换成OBJ文件 。 2、编译单元 :根据C++标准,每一个CPP文件就是一个编译单元。 每个编译单元之间是相互独立并且互相不可知 。 3、目标文件 :由编译所生成的文件,以机器码的形式包含了编译单元里所有的代码和数据,还有一些期他信息,如未解决符号表,导出符号表和地址重定向表等。目标文件是以二进制的形式存在的。 根据C++标准, 一个编译单元(Translation Unit)是指一个.cpp文件以及这所include的所有.h文件 ,.h文件里面的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,后者拥有PE(Portable Executable,即Windows可执行文件)文件格式,并且本身包含的就是二进制代码,但是不一定能执行,因为并不能保证其中一定有main函数。 当编译器将一个工程里的所有.cpp文件以分离的方式编译完毕后,再由链接器进行链接成为一个.exe或.dll文件 。 下面让我们来分析一下编译器的工作过程: 我们跳过语法分析,直接来到目标文件的生成,假设我们有一个A.cpp文件,如下定义: int