9

当我们编译代码时,会生成一个目标文件。从该目标文件,在链接过程中生成一个可执行文件。

为什么我们需要一个目标文件?目标文件有什么用?不能直接生成可执行文件吗?毕竟,我们使用的是可执行文件来运行程序。

4

1 回答 1

14

目标文件是链接器用来构建完整的可执行文件(或库)的文件。

您通常可以让编译器“直接”输出可执行文件,语法将取决于编译器。以 GCC 为例:

gcc foo.c bar.c ...

将生成一个可执行文件,并且不会保留任何中间目标文件(但可能已经生成了一个 - 随后将其删除)。

目标文件用于进行增量构建。您将每个源文件(或一组源文件)编译为目标文件,然后将它们全部链接到一个可执行文件中。这允许您仅重新编译自上次构建以来已更改的源文件,从而可能节省大量时间。
或者您可以使用相同的目标文件来链接不同的可执行文件(例如,重新使用构建的部分来生成可执行文件和共享库),与每次编译所有内容相比再次节省时间和资源。

从理论的角度来看,目标文件不是“需要的”。它们非常实用(实际上对于某些(大多数?)工具链在技术上是必需的,即汇编器知道如何生成而链接器知道如何链接的东西)。

于 2012-12-22T08:27:55.643 回答