gpt4 book ai didi

c++ - 'compiling and linking' 和 'compiling'(使用 g++)有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 20:34:49 26 4
gpt4 key购买 nike

我是 C++ 的新手,一直在学习如何创建 makefile 并注意到我的示例之一(与“更新”更改的文件有关,并忽略未更改的文件)具有以下命令:

# sysCompiler is set to g++
.o:.cpp
$(sysCompiler) -c $<

根据 g++ 手册,这会编译或汇编源文件,但不会链接它们。

> -c Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an object file for each source file. By default, the object file name for a source file is made by replacing the suffix .c',.i', .s', etc., with.o'. Unrecognized input files, not requiring compilation or assembly, are ignored.

换句话说,我只是想知道在使用 C++ 进行编译时“不链接”究竟意味着什么?

最佳答案

单个 C 或 C++ 程序的代码可能会拆分到多个 C 或 C++ 文件中。这些文件称为翻译单元

编译将每个翻译单元转换为一种特殊格式,表示属于单个翻译单元的二进制代码,以及一些将多个单元连接在一起的附加信息。

例如,可以在一个a.c 文件中定义一个函数,然后从b.c 文件中调用它。该格式将函数的二进制代码放入a.o中,同时记录了函数的代码从什么位置开始。文件 b.c 将所有对该函数的引用记录到 b.o 中。

链接将 b.o 中的引用连接到 a.o 中的函数,生成程序的最终可执行文件。

将翻译过程分为编译和链接两个阶段,以提高翻译速度。当您从一组大约十几个文件修改单个文件时,只需要编译一个文件,而其余的 .o 文件可以从以前的翻译中重用。

关于c++ - 'compiling and linking' 和 'compiling'(使用 g++)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46144431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com