【发布时间】:2016-03-16 15:03:28
【问题描述】:
我开始使用 Rust 编程,我注意到的第一件事是 Rust 会生成大型二进制文件。例如,Rust 的“Hello world!”二进制文件大小约为 600K,而等效的 C 二进制文件大小约为 8K。
经过一番搜索,我找到了this SO 帖子,它解释说 Rust 二进制文件很大,因为所有需要的库都是静态链接的。但是C不也是这样吗?当我用C写#include <stdio.h>时,我不是也静态链接了相关的I/O库吗?我一直认为答案是肯定的,但现在我开始怀疑自己了。
【问题讨论】:
-
不,并非总是如此。通常
-l用于动态链接.so文件。 -
链接不同于头文件包含。 (
#include <stdio.h>不是链接命令/语句。) -
不,静态链接与动态链接是您选择的选项。
-
@callyalater
#include本质上不是将库复制并粘贴到源文件中吗?也许我很密集,但我看不出它不会静态链接库。 -
#include将 文件内容 复制到源文件中,但如果标头只是函数声明,那么只需告诉程序这些函数是可在您的代码中调用。实际的实现可能在另一个文件中定义,该文件需要(静态或动态)链接到您的可执行文件。如果您查看stdio.h的标题,您会发现它只包含函数原型。
标签: c static-libraries