【问题标题】:Update MSVCRT.dll on Windows XP在 Windows XP 上更新 MSVCRT.dll
【发布时间】:2014-05-22 23:50:36
【问题描述】:

我正在 Windows 8 上开发一个小工具,它链接到 msvcrt.dll 并使用 memmove_s。我想在 Windows XP 机器上部署我的工具。我的 msvcrt 版本是 7.0.30xx,但在 XP 上是 7.0.2600。旧版本不包含memmove_s,因此程序在启动时崩溃。

我尝试安装 Microsoft Visual C++ Redistributable Package(2010 和 2012 版本),但似乎 msvcrt.dll 未受影响。

【问题讨论】:

  • 您的应用程序是否使用 /MT 编译? stackoverflow.com/questions/757418/…
  • @Matt 我正在使用 MinGW。我不知道 libgcc 是如何编译的。
  • 这个问题通常发生在应用程序链接静态运行时,我认为你应该检查你的编译器选项。
  • @Matt 我已经静态链接到libcrypto++,因为似乎不可能生成该库的 dll。但我不知道这与 MSVCRT 有什么关系……
  • 这是 MinGW 的责任,它无法正确地对 CRT 进行版本控制,因为它依赖于操作系统提供的任何内容。如果 XP 支持是硬性要求,那么您将不得不放弃使用安全 CRT 功能。

标签: c++ dll deployment windows-xp msvcrt


【解决方案1】:

msvcrt.dll 是 Windows 拥有的私有系统 DLL。你不应该触摸它,也不应该链接它。

您应该使用 Visual Studio 附带的普通 msvcrXXX.dll(例如 msvcr100.dll,如果您使用 Visual Studio 2010 构建)(或者如果您不想部署 CRT DLL,则只使用 CRT 的静态链接与您的工具分开)。

还请考虑来自MSDN CRT documentation 的这条注释:

msvcrt.dll和msvcr110.dll有什么区别?

msvcrt.dll 现在是“已知 DLL”,这意味着它是 Windows 拥有和构建的系统组件。它仅供系统级组件将来使用。

【讨论】:

  • 一些依赖项(我认为是 Qt 和 OpenSSL)也链接到 msvcrt 。是否有系统更新或服务包之类的东西来升级操作系统的 MSVCRT.dll?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2018-09-06
  • 2011-03-03
  • 2014-10-06
  • 2010-09-11
  • 2014-10-14
  • 2011-01-26
相关资源
最近更新 更多