与stdio.h对应的库文件是动态链接还是静态链接

时间:2018-05-04 14:45:32

标签: c++ c linux unix

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

1 个答案:

答案 0 :(得分:4)

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

  

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

包含标题不会链接任何内容。 C标准库由C编译器自动链接,否则如果使用在例如C语言中声明的函数,则会在链接步骤中获得undefined reference errorsstdio.h

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

相关问题