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