【问题标题】:C Standard Library linking in windowsWindows 中的 C 标准库链接
【发布时间】:2014-03-13 16:38:54
【问题描述】:
  1. 标准库和运行时库有区别吗?

  2. windows中的C标准库和Windows C RT库一样吗?

  3. 是否在 msvcrt.dll 中实现?如果没有,在哪里?

  4. 该库如何以及何时链接到可执行文件?是否有相对地址的 .lib 文件?

对不起,如果我混合了一些东西......

【问题讨论】:

  • 这取决于您使用的构建工具。

标签: c windows dll standard-library


【解决方案1】:

在 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 的可执行文件加载速度变慢(并不是任何人都会注意到我们现在拥有的超高速机器)。

【讨论】:

  • 请注意,现代版本的 Visual Studio 不再包含单线程库。此外,他们不使用 MSVCRT.DLL,他们使用 MSVCRTnn.DLL,其中 nn 取决于 Visual Studio 的版本。
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 2013-09-19
  • 2021-10-27
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多