【发布时间】:2010-05-10 23:09:27
【问题描述】:
当我对旧问题有其他问题时,有人建议我创建新问题并参考旧问题。所以,这是原来的问题:What is the C runtime library?
好的,从您的回答中,我现在了解到静态链接库是 Microsoft 对 C 标准函数的实现。现在:
如果我做对了,方案如下:我想使用 printf(),所以我必须包含 <stdio.h>,它只是告诉编译器有一个带有这些参数的函数 printf()。现在,当我编译代码时,因为 printf() 是在 C 标准库中定义的,并且因为 Microsoft 决定将其命名为 C 运行时库,所以它会自动从 libcmt.lib 静态链接(如果在编译器中设置了 libcmt.lib)编译时间。我问,因为在维基百科上,在关于运行时库的文章中,运行时库是在运行时链接的,但是 .lib 文件是在编译时链接的,对吗?
现在,让我感到困惑的是什么。有 .dll 版本的 C 标准库。但我认为要链接 .dll 文件,您必须实际调用 winapi 程序来加载该库。那么,如果没有静态库提供代码告诉 Windows 从 dll 加载所需的函数,这些函数如何动态链接?
关于这个主题的最后一个问题 - C 标准库函数是否也调用 winapi,即使它们不是像更高级的 WinAPI 函数那样的 .dll 文件?我的意思是,最后要访问帧缓冲区并打印一些东西,你必须告诉 Windows 去做,因为操作系统不能让你直接操作硬件。我认为操作系统必须以相同的方式在类似版本中支持所有 C 标准库函数,因为它们是静态链接的,并且可以不同地支持更复杂的 WinAPI 调用,因为新版本的操作系统可以在 .dll 文件中进行调整.
【问题讨论】: