具有完整 C++11 支持的 Windows C++ 编译器(应该与 Qt 一起使用)

2021-12-09 00:00:00 windows qt c++ c++11

哪个 C++ 编译器目前在 Windows 平台上完整支持 C++11?

Which C++ compiler currently has complete C++11 support on windows platform?

Microsoft 编译器目前没有完整的 C++11 支持(并且不会很快添加).
MinGW g++(来自 mingw.org)不支持开箱即用的 std::thread.它也无法编译 Qt 4 源(在构建 QtGuid4.dll 时内存不足,已知的解决方法对我不起作用).
我浪费了几天时间尝试在 Windows 上使用 clang,设法编译它,但无法启用 c++11 支持,因为它需要 libstdc++,(我认为)当时没有移植到 windows 平台.Qt 4 也不支持它.

Microsoft compiler currently does not have full C++11 support (and it won't be added any time soon).
MinGW g++ (from mingw.org) does not support std::thread out of the box. It also can't compile Qt 4 sources (runs out of memory while building QtGuid4.dll, known workarounds didn't work for me).
I've wasted several days trying to make clang work on windows, managed to compile it, but couldn't enable c++11 support because it required libstdc++ which (I think) wasn't ported to windows platform at that moment. It also isn't supported by Qt 4.

还有什么?我已经为 C++03 工作了很长时间,我想尝试一下新功能,但我真的不想要一个支持不完整的工具(这会在编写代码时增加额外的麻烦)代码)或在链接库时内存不足(在 8GB 系统上).

What else is there? I've been working for C++03 for a long time, and I'd like to give new features a whirl, but I don't really want a tool that with incomplete support (that'll add extra headache while writing a code) or can run out of memory (on 8GB system) while linking a library.

我正在开发 64 位 Windows 7,虽然支持 64 位会很好,但我最感兴趣的是 32 位应用程序,因此生成 64 位可执行文件的能力是可选的.

I'm working on windows 7 64bit, and although having 64bit support would be nice, I'm mostly interested in 32bit applications, so ability to produce 64bit executables is optional.

有什么建议吗?

推荐答案

首先看GCC 4.8 中实验性 C++11 支持的状态.只有一项提案尚未正式实施.然后,看看C的实现状态libstdc++ 中的 ++11.如您所见,有些功能尚未实现.尽管如此,我们可以说 GCC 中的 C++11 支持或多或少完整并且可用.

First of all, see Status of Experimental C++11 Support in GCC 4.8. Only one proposal is not officially implemented yet. Then, have a look at Implementation Status of C++11 in libstdc++. As you can see some features are yet to be implemented. Nevertheless, we can state that C++11 support in GCC is more or less complete and usable.

现在,关于 Windows:可能绝对是最好的原生(不是Cygwin!) GCC 的端口>,我个人认为生产质量是MinGW-w64.您可以在此处下载.当前(在撰写本文时)最新版本基于 GCC 4.8.2.它已经支持 std::thread.更重要的是,它提供了所有可能的变化:

Now, concerning Windows: probably definitely the best native (not Cygwin!) port of GCC, which I personally consider production-quality, is MinGW-w64. You can download it here. The current (at the time of writing) latest version is based on GCC 4.8.2. It already has support for std::thread. What's more, it offers all the possible variations:

  • 64 位目标;
  • 32 位目标;
  • Win32 线程;
  • POSIX 线程;
  • SEH 例外;
  • 矮人异常;
  • SJLJ 例外.

注意:
选择要下载的发行版时要小心:要使 std::thread 可用,您需要具有 POSIX 线程的发行版.

NOTE:
Be careful when choosing which distribution to download: for std::thread to be available, you need the one with POSIX threads.

此外,我确认我自己已经多次构建 Qt 4.8.4 和 4.8.5,甚至使用此工具链针对 64 位.但这还不是全部,这里列出了迄今为止我个人使用 MinGW-w64 构建的一些亮点:

Furthermore, I confirm that I've built Qt 4.8.4 and 4.8.5 myself numerous times and even targeting 64-bit with this toolchain. But that's not all, here is a list of some highlights that I've personally built with MinGW-w64 so far:

  • Boost C++ 库;
  • Qt;
  • LLVM/Clang;
  • Google V8 JavaScript 引擎;
  • ODB:C++ 对象关系映射 (ORM);
  • SQLite;
  • GLEW;
  • Vim;
  • ncurses;
  • 等等...

我认为能够使用适用于 Windows 的旧 GCC 构建像 64 位目标这样庞大而多样的代码库是 MinGW-w64 开发团队的奇迹般的成就.再次证明了工具链的质量.

I think being able to build such huge and diverse code bases as 64-bit targets with good old GCC for Windows is a miraculous achievement of MinGW-w64 developer team. It once again proves the quality of the toolchain.

我最近使用面向 x64 的 MinGW-w64 4.8.2 构建了 Qt 5.1.1.总而言之,它进行得很顺利,但是在构建之前必须修补一些小问题.我已经轻轻地收集了所有需要的补丁,并使用一个简单的批处理脚本自动完成了打补丁、构建和安装的整个过程.如果您有兴趣,请查看我的 Qt for Windows.用法非常简单,我将跳过对其进行评论,而只是让你们阅读批处理脚本.请记住,您需要 Unix 的 patch.exe 来应用您可以从 MSYS 或 MSYS2 获得的补丁(见下文).可以获取Qt 5.1.1源代码此处.

I've recently built Qt 5.1.1 using MinGW-w64 4.8.2 targeting x64. All in all, it went pretty smooth, but there are a few minor issues which have to be patched before the build. I've gently collected all the required patches and automated the whole process of patching, building, and installing with a simple batch script. If you are interested, check out my Qt for Windows. The usage is so simple that I'll skip commenting on it and simply let you guys read the batch script. Keep in mind that you need Unix's patch.exe to apply the patches which you could get, for example, from MSYS or MSYS2 (see below). You can obtain Qt 5.1.1 source code here.

注意:
重新发明轮子(维护 Qt 的个人构建脚本和补丁)似乎不再合理.MSYS2(见下文)现在负责一切一个>.也就是说,如果您需要使用不同的选项和/或标志重建 Qt,那么只需编辑相应的 PKGBUILD 本地文件并使用 makepkg-mingw 实用程序.

NOTE:
Does not seem reasonable to reinvent the wheel (maintaining personal build scripts and patches for Qt) anymore. MSYS2 (see below) now takes care of everything. That is if you need to rebuild Qt with different options and/or flags, then simply edit the corresponding PKGBUILD file locally and use the makepkg-mingw utility accordingly.

注意:
其实Qt项目官方推荐使用MinGW-w64和MSYS2.

这不是直接问的,但我想在这里添加它,因为这是MinGW-w64的姊妹项目,对于必须使用Unix为Windows开发本机软件的人来说非常有用- 类似环境.

This was not asked directly, but I feel like adding it here as this is a sister project of MinGW-w64, and it's very useful for anyone who has to develop native software for Windows using Unix-like environment.

那些曾经使用过原始 MSYS 的人可能知道多少岁了.它已经很久没有改进了,那里的所有 Unix 实用程序都已经过时了.

Those of you who have ever used the original MSYS probably know how old it is. It hasn't been improved for ages, and all the Unix utilities there are already terribly outdated.

提供 MinGW-w64 构建(如上所列)的人,现在还提供 MSYS2,您可以在此处下载>.最近,它出来了测试版,所以一定要查看最新版本.它是为 x86 和 x64 架构构建的(使用 MinGW-w64 工具链本身).所有实用程序都更新为最新版本.例如,您已经可以享受以下内容:Bash 4.2、Make 3.99、Git 1.8.4 等等;开箱即用,在 Windows 上本地运行!

Guys who provide builds of MinGW-w64 (listed above), now also provide builds of MSYS2 which you can download here. Recently, it came out of beta, so be sure to checkout the latest release. It's built for both x86 and x64 architectures (with the MinGW-w64 toolchain itself). All the utilities are updated to their latest versions. For instance, you can already enjoy things like: Bash 4.2, Make 3.99, Git 1.8.4, and many more; which run natively on Windows out of the box!

注意:
请务必查看他们的 Wiki 以顺利开始.

NOTE:
Make sure to check their Wiki to have a smooth start.

最初的 MinGW 改进非常缓慢,其开发人员也没有甚至考虑添加 64 位目标生成支持.由于他的公司需要在 Windows 上构建 64 位目标,一位雄心勃勃的人 Kai Tietz 接管了它并将其分叉.MinGW-w64 项目就是这样诞生的.尽管主要目标是添加 64 位支持,但开发人员已在许多方面改进了工具链并解决了许多其他问题.从那时起,MinGW-w64 项目不断发展,现在在质量方面远远领先于 MinGW.当MinGW-w64向MinGW提出加入房屋一起工作时,MinGW的开发者反应不足,拒绝合作.结果,今天有两个名称相似的项目,有时会引起混淆,但质量和支持的差异不言而喻.

The original MinGW was very slow on improvements, and its developers didn't even consider adding 64-bit target generation support. One ambitious guy, Kai Tietz, took over it and forked it as his company needed to build 64-bit targets on Windows. That's how MinGW-w64 project was born. Although the primary goal was to add 64-bit support, the developers have improved the toolchain in many aspects and addressed a great deal of other issues. Since then the MinGW-w64 project has grown and now is far ahead of MinGW in terms of quality. When MinGW-w64 proposed to MinGW to join the houses and work together, the developers of MinGW showed inadequate reaction and refused to cooperate. As a result, today there are 2 projects with similar name what sometimes causes confusion, but the differences in quality and support speak for themselves.

相关文章