问题描述
我正在用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 ++可再发行的依赖项。实际上,您甚至可以在没有安装程序的情况下将软件作为便携式应用运行。