首页 > 解决方案 > stdio.h对应的库文件是动态链接的还是静态链接的

问题描述

我的意思是数学库是动态链接的。所以我在想对应于 stdio.h(printf 和 scanf 代码)的库文件是动态链接的?此外,当我们包含 stdio.h 时,其中声明的所有函数都是在运行时添加的,还是只添加那些使用的函数?

标签: c++clinuxunix

解决方案


在 Linux 和许多其他 *nix 系统上,您通常会动态链接 C 标准库,它是默认的gccand clang。但是,如果您愿意,您仍然可以自由地进行静态链接。这完全取决于您的系统、环境、工具链和个人设置。

此外,当我们包含 stdio.h 时,其中声明的所有函数都是在运行时添加的,还是只添加那些使用的函数?

包含标题不会链接任何内容。C 标准库由 C编译器自动链接,否则如果您使用在例如stdio.h.

也就是说,通过动态链接,整个库在动态链接器需要时在运行时加载——无法加载单个函数。动态链接的好处是操作系统只需要这个库的一个副本,不管有多少进程链接到它。该库可以映射到每个需要它的进程地址空间中。这可以在运行时节省 RAM。


推荐阅读