c++ - 全新安装的 Windows 是否包含标准 C++ 库?
问题描述
我正在用 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 库?
解决方案
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++ 可再发行依赖项。事实上,您甚至可以将您的软件作为便携式应用程序运行,而无需安装程序。
推荐阅读
- javascript - Typescript Promise 拒绝类型
- svg - SVG 旋转(矩阵)矩形的宽度。看起来像宽度和高度数字被缩放
- php - 如何获取数组的值?
- reactjs - Redux 表单:访问 JSX 表单中的字段组件 meta.touched 属性
- python - 用于词嵌入的卷积模型中 keras 中 Flatten 后大小不兼容的密集层
- csv - Linux shell:检测 CSV 日志文件的状态变化
- python - 自动转换“|” 换行符,但如果在括号内则不行?
- php - 致命错误:未捕获的错误:在解析数据时调用字符串上的成员函数 find()
- html - 两个具有不规则形状的连接 div - 带有文本的图像
- python - 在列中无限重复函数,直到值达到一定水平