C++ 中的翻译单元与编译单元与目标文件与可执行文件与....

Translation unit vs Compilation unit vs object file vs executable vs.... in C++

我找不到翻译单元、编译单元、目标文件、可执行文件之间的区别...在很多地方我看到一个被使用而不是另一个。

我知道这些文件是在C++程序编译和链接过程中生成的。任何人都可以列出在这些过程中生成的所有文件并说明它们之间的区别吗?

翻译单元与编译单元相同(因此您的源代码及其包含的所有 header 文件)

Object文件,在典型情况下,是编译单元被编译的结果。

可执行文件是将项目的object个文件与运行时库函数链接在一起的结果。

编译期间实际生成哪些文件取决于编译器,但大多数现代编译器将简单地读取源文件和 headers,然后生成 object 文件,该文件传递给如果您只有一个源文件,则直接链接器。这将生成可执行文件。

较旧的编译器会将 "preprocess" 作为一个单独的步骤,因此您最终会在一个临时文件中得到所有 compile-unit。同样,在过去,不是在 object 文件中生成机器代码,而是编译器输出汇编代码,然后通过汇编程序进行汇编,这将生成 object 文件。链接保持相似。

请注意,这只是实践,C 或 C++ 标准中没有关于可执行文件或 object 文件的内容。由编译器实现以他们喜欢的任何方式解决这些问题。