C++ 中编译和链接的过程是如何工作的?
大家好!我刚开始学习 C++ 不久,对点击 "Build" 按钮或在终端中运行 g++ 后发生的事情感到困惑。
我写了一个简单的程序,包含两个文件:`main.cpp` 和 `utils.cpp`。在 `utils.cpp` 中,我有一个函数 `void sayHello()`,它向控制台输出 "Hello!"。在 `main.cpp` 中,我将该函数声明为外部函数(`extern void sayHello();`)并调用它。
当我用命令 `g++ main.cpp utils.cpp -o program` 编译时,一切正常。但我不明白编译器具体做了什么,链接器又做了什么。为什么如果我在函数声明中打错字(例如写成 `sayHelllo`),会在链接阶段而不是编译阶段得到错误?还有,那些有时出现在项目文件夹中的 .o 文件是从哪里来的?
特别让我困惑的是,在某些 IDE 中,我看到单独的步骤:"Compiling main.cpp..."、"Compiling utils.cpp...",然后是 "Linking..."。为什么需要这么多步骤?为什么不能一次性完成?非常感谢。