【问题标题】:Translation unit vs Compilation unit vs object file vs executable vs.... in C++C++ 中的翻译单元 vs 编译单元 vs 目标文件 vs 可执行文件 vs....
【发布时间】:2016-04-01 11:32:48
【问题描述】:

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

我知道这些文件是在 C++ 程序编译和链接期间生成的。谁能列出这些过程中将生成的所有文件并指定它们之间的区别?

【问题讨论】:

    标签: c++ compilation executable object-files translation-unit


    【解决方案1】:

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

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

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

    在编译过程中实际生成哪些文件取决于编译器,但大多数现代编译器会简单地读取源文件和头文件,然后生成目标文件,如果您只有一个源文件,则直接将其传递给链接器。这将生成可执行文件。

    较旧的编译器会将“预处理”作为一个单独的步骤,因此您最终会将所有编译单元放在一个临时文件中。类似地,在过去,不是在目标文件中生成机器代码,而是由编译器输出汇编代码,然后通过汇编器进行汇编,这样就形成了目标文件。链接保持相似。

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

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2014-12-02
      • 2017-07-29
      • 1970-01-01
      • 2023-03-24
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多