【发布时间】:2014-03-13 16:38:54
【问题描述】:
标准库和运行时库有区别吗?
windows中的C标准库和Windows C RT库一样吗?
是否在 msvcrt.dll 中实现?如果没有,在哪里?
该库如何以及何时链接到可执行文件?是否有相对地址的 .lib 文件?
对不起,如果我混合了一些东西......
【问题讨论】:
-
这取决于您使用的构建工具。
标签: c windows dll standard-library
标准库和运行时库有区别吗?
windows中的C标准库和Windows C RT库一样吗?
是否在 msvcrt.dll 中实现?如果没有,在哪里?
该库如何以及何时链接到可执行文件?是否有相对地址的 .lib 文件?
对不起,如果我混合了一些东西......
【问题讨论】:
标签: c windows dll standard-library
在 Windows 上,有 3 个模型处于调试和非调试状态,即总共 6 个模型
1) 单线程 2) 使用 MSVCRT.DLL 的多线程 3) 多线程不使用 MSVCRT.dll
默认情况下,windows 选择选项 2。这是唯一使用运行时库的选项。使用选项 1 和 3,所有内容都链接到可执行文件中。您可以将该可执行文件带到 95 以上的任何 Windows 机器上,它应该可以工作。不同之处在于情况 2 的文件比情况 1 或 3 小很多。如果您尝试将文件压缩到 CD 或软盘上,这一点很重要。案例 2 也与特定版本的 MSVCRT 相关联。例如,如果您在 VC6 上构建它并尝试在 Windows 7 上运行可执行文件,除非您在 W7 机器上安装了 VC6 msvcrt,否则它将无法工作。
问题1:标准和运行时的区别。案例 1 和 3,没有。案例2:是的。 .lib 只是一个跳转表。 .dll 包含实际代码
问题2:这和问题1不是同一个问题吗?
问题 3:msvcrt = Microsoft Visual C 运行时。这是运行时库
问题4:在编译时,如何使用链接器,何时链接。在案例 1 和 3 的运行时,它已准备就绪。在案例 2 中,如何 - 它已经完成。 WHEN - 有一个额外的步骤,跳转表代码在运行之前与 DLL 链接。这个额外的步骤使案例 2 的可执行文件加载速度变慢(并不是任何人都会注意到我们现在拥有的超高速机器)。
【讨论】: