C 中的库是静态链接的吗?

Are libraries in C statically linked?

我开始用 Rust 编程,我注意到的第一件事是 Rust 生成大型二进制文件。例如,Rust 的 "Hello world!" 二进制文件大 ~600K,而等效的 C 二进制文件大 ~8K。

经过一番搜索,我发现 SO post 这说明 Rust 二进制文件很大,因为所有需要的库都是静态链接的。但是 C 不也是这样吗?当我在 C 中编写 #include <stdio.h> 时,我不是也静态链接了相关的 I/O 库吗?我一直认为答案是'yes',但现在我怀疑自己。

#include 文件内容 复制到源文件,但是如果 header 只不过是函数声明,那么所要做的就是告诉这些函数可以在您的代码中调用的程序。实际实现可能在另一个文件中定义,该文件需要(静态或动态)链接到您的可执行文件。如果您查看 stdio.h 的 header,您会发现它只包含函数原型。

许多编译器提供了对标准库进行静态或动态链接的选项。