4

在 Windows 中,有一个默认的 C 库 msvcrt.dll。

是否可以编写仅使用 msvcrt.dll 中的函数的简单 C 程序?这将减轻安装最近的 VC 运行时的需要。

我认为一种可能的方法是显式指定 /NODEFAULTLIB,并使用 dll 导入过程来导入 msvcrt.dll 函数。

有人有线索吗?

4

2 回答 2

3

您不想使用 msvcrt.dll。

  • 它非常古老,因此不符合现代 C 运行时库规范。
  • 它的存在主要是为了向后兼容以及供某些具有特殊要求的系统组件使用。
  • 如果发现安全问题,您不能指望它会被广泛修补。
  • 无法保证使用现代编译器生成的二进制文件将与 msvcrt.dll 中的 ABI 兼容。
  • 现代 C 和 C++ 编译器对其运行时库在优化、设置和拆卸方面有深入的了解和期望,因此您不应该混合和匹配它们。

使用编译器附带的运行时库。如果您不想担心重新分发它,您可以静态链接到它,或者您可以阅读有关在您的应用程序中重新分发它的正确方法。

于 2014-02-05T18:56:26.547 回答
3

您可以使用 MinGW-w64 GCC,它链接到msvcrt.dll您所说的原因。

你可以在这里找到下载。-static-libgcc -static-libstdc++如果您不想重新分发任何 DLL,您可以链接您的程序。

话虽如此,您只需将msvcr*.dll文件与可执行文件一起发送即可,无需安装任何东西。

于 2014-02-05T16:17:26.583 回答