【发布时间】:2012-12-22 08:17:42
【问题描述】:
当我们编译代码时,会生成一个目标文件。从该目标文件,在链接过程中生成一个可执行文件。
为什么我们需要一个目标文件?目标文件有什么用?不能直接生成可执行文件吗?毕竟我们是使用可执行文件来运行程序的。
【问题讨论】:
标签: linker executable object-files
当我们编译代码时,会生成一个目标文件。从该目标文件,在链接过程中生成一个可执行文件。
为什么我们需要一个目标文件?目标文件有什么用?不能直接生成可执行文件吗?毕竟我们是使用可执行文件来运行程序的。
【问题讨论】:
标签: linker executable object-files
目标文件是链接器用来构建完整的可执行文件(或库)的文件。
您通常可以让您的编译器“直接”输出可执行文件,语法将取决于编译器。以 GCC 为例:
gcc foo.c bar.c ...
将生成一个可执行文件,并且不会保留任何中间对象文件(但可能已经生成了一个 - 随后被删除)。
对象文件用于进行增量构建。您将每个源文件(或一组源文件)编译为目标文件,然后将它们全部链接到一个可执行文件中。这允许您仅重新编译自上次构建以来已更改的源文件,从而可能节省大量时间。
或者您可以使用相同的目标文件来链接不同的可执行文件(例如,重复使用构建的部分来生成可执行文件和共享库),与每次编译所有内容相比再次节省时间和资源。
从理论上讲,目标文件不是“需要的”。它们非常实用(实际上对于某些(大多数?)工具链而言,它们在技术上是必需的,因为汇编器知道如何生成而链接器知道如何链接)。
【讨论】: