【问题标题】:Does a fresh install of Windows include a standard C++ library?全新安装的 Windows 是否包含标准 C++ 库?
【发布时间】:2020-12-12 01:13:10
【问题描述】:

我正在用 Mingw-w64 做一些实验,它可以很好地编译常规 C 代码,链接到 Windows 系统 MSVCRT.DLL C 库。但是,如果我编译 C++ 代码,那么 mingw 的 g++ 链接到看起来像 GNU libstdc++ 库的东西。为什么?常规 C 二进制文件不会发生这种情况。我一直看到商业 Windows 软件,包括 Microsoft “C++ redist”软件包,我猜它与他们用于开发软件的 Visual C++ 版本相匹配。因此,Windows 上似乎默认没有 C++ 库。如果可能的话,我想使用“系统”C++ 库而不是使用 GNU 库来减小 mingw 正在编译的二进制文件的大小。但是,我也不想要需要安装的单独的 C++ 可再发行组件。我是否坚持使用 GNU 库?

【问题讨论】:

  • 没有“系统 C++ 库”。 MSVCRT.DLL 是 Microsoft Visual C++ Runtime,Windows 没有预装,所以需要安装。很有可能,其他软件已经为您安装了它。另一方面,如果你编译你的应用程序以使用这个库的静态版本而不是动态版本,那么你根本不需要 DLL。
  • @RemyLebeau 你有这个说法的来源吗?我很难相信 Windows 10 默认不附带任何 MVCR。
  • Visual Studio 2015+ 运行时确实预装在 Windows 10 上,但 gcc 只能使用 libstdc++,您需要使用 Visual Studio 或 clang 才能使用 Visual Studio 运行时

标签: c++ c windows gcc mingw


【解决方案1】:

MinGW/MinGW-w64 构建确实使用系统标准库,它们是 Windows 的一部分。

只有在使用 MSVC 编译源代码时才需要 Visual C++ 可再发行包和运行时包。

如果您的 MinGW/MinGW-w64 版本不是静态链接的,您可能需要发送 libstd DLL 文件,但您可以将它们与您的 .exe 和/或 .dll 文件以及任何其他文件放在同一位置依赖 .dll 文件。

我真的很喜欢 MinGW/MinGW-w64 构建不需要 Visual C++ 可再分发的事实,原因如下:

  • 用户无需再安装另一个 Visual C++ 可再发行组件。
  • 二进制文件很紧凑,不依赖于除操作系统中的库之外的其他 Microsoft 库,这增加了您的软件在不同 Windows 版本上运行良好的机会。
  • 安装(和卸载)说明(或安装程序代码)更容易,因为不需要安装 Visual C++ 可再发行依赖项。事实上,您甚至可以将您的软件作为便携式应用程序运行,而无需安装程序。

【讨论】:

  • 您可以对 Visual Studio 执行相同操作,并将运行时 dll 与您的应用程序放在同一目录中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2016-08-23
相关资源
最近更新 更多