linker - 为什么需要一个目标文件来生成可执行文件?

标签 linker executable object-files

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

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

最佳答案

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

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

gcc foo.c bar.c ...

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

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

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

关于linker - 为什么需要一个目标文件来生成可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14001202/

相关文章:

c - 链接器错误 : what could be going on?

C++ - 如何获取 C++ 可执行文件的当前目录?

windows - 在 list 中指定公钥 token

C 编程基础知识 : Why can't I see the . o 使用 gcc 编译 .c 文件后的文件

java - 在 Spark 中保存和读取键值对

exe - 目标文件/可执行文件 : What's the difference between a segment and a section?

在windows下在stm32端口构建micropython

c++ - 寻找符号依赖的起源

python - 将带有音乐的 Python 3.6.1 俄罗斯方 block 游戏转换为 exe

c++ - 如何使用 CMake 处理仅 header 的第三方?