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

Translation unit vs Compilation unit vs object file vs executable vs.... in C++(翻译单元vs编译单元vs目标文件vs可执行文件vs...在C++中)
本文介绍了翻译单元vs编译单元vs目标文件vs可执行文件vs...在C++中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

推荐答案

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

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

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

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

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

这篇关于翻译单元vs编译单元vs目标文件vs可执行文件vs...在C++中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Unknown type name __m256 - Intel intrinsics for AVX not recognized?(未知类型名称__M256-英特尔AVX内部功能无法识别?)
How can an declare an array in a function that returns an array in c++(如何在用C++返回数组的函数中声明数组)
Is it possible to define a class in 2 or more file in C++?(在C++中可以在两个或多个文件中定义一个类吗?)
Why can#39;t I create an array of automatic variables?(为什么我不能创建一个自动变量数组?)
zeromq: reset REQ/REP socket state(Zeromq:重置REQ/REP套接字状态)
Can I resize a vector that was moved from?(我可以调整从中移出的矢量的大小吗?)