编译代码时,会生成目标文件。从该目标文件中,在链接过程中生成可执行文件。
为什么我们需要一个目标文件?对象文件的用途是什么?难道不可能直接生成可执行文件吗?毕竟,我们正在使用可执行文件来运行该程序。
答案 0 :(得分:12)
目标文件是链接器用于构建完整可执行文件(或库)的内容。
您通常可以让编译器“直接”输出可执行文件,语法将取决于编译器。例如GCC:
gcc foo.c bar.c ...
将生成一个可执行文件,并且不会保留任何中间对象文件(但可能已经生成了一个 - 并随后将其删除)。
目标文件用于进行增量构建。您将每个源文件(或源文件组)编译为目标文件,然后将它们全部链接在一个可执行文件中。这使您只能重新编译自上次构建以来已更改的源文件,从而节省了大量时间 或者您可以使用相同的目标文件链接不同的可执行文件(例如,重新使用构建的部分以生成可执行文件和共享库),与每次编译所有内容相比,再次节省了时间和资源。
从理论的角度来看,对象文件不是“需要的”。它们非常实用(实际上技术上需要一些(大多数?)工具链,这是汇编程序知道如何生成的东西,链接器知道如何链接)。