为什么调用静态链接器而不是预处理器?

Why call static linker instead of preprocessor?

假设我们有一个静态库,我们想将它用于我们的 main.c 文件,现在的问题是

为什么我们必须调用链接器 (ld)?因为我们所做的只是复制 - 将静态库中的代码粘贴到我们的 main.c 文件中?

预处理器不能处理吗?

可以做到这一点,就像用鱼砍树一样。这并不是它设计的真正目的。

预处理器阶段是为了在将 source 代码提供给编译阶段之前对其进行变形。虽然有些人可能会抱怨它看起来有多么不足,但它确实很好地完成了这项工作。

另一方面,链接器根本不理解源代码。它的主要目的是将 object 文件(可能来自 C、C++、nasm、gfortran、BCPL 或更奇怪的编译器)绑定在一起,以创建一个可执行文件,该文件能够 运行 在目标系统上。