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

时间:2013-10-17 11:28:21

标签: c++ windows qt c++11

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

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

还有什么?我已经为C ++ 03工作了很长时间,我想给新功能一个旋转,但我真的不想要一个不完全支持的工具(这会增加额外的头痛,同时写一个代码)或链接库时可能耗尽内存(在8GB系统上)。

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

有什么建议吗?

3 个答案:

答案 0 :(得分:64)

首先,请参阅 Status of Experimental C++11 Support in GCC 4.8 。只有一项提案尚未正式实施。然后,看看 Implementation Status of C++11 in libstdc++ 。正如您所看到的,某些功能尚未实现。尽管如此,我们可以说GCC中的C ++ 11支持或多或少完整可用。

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

  • 64位目标;
  • 32位目标;
  • Win32线程;
  • POSIX线程;
  • SEH例外;
  • DWARF例外;
  • SJLJ例外。

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

此外,我确认我已经多次构建了Qt 4.8.4和4.8.5,甚至使用此工具链以64位为目标。但这还不是全部,这是我到目前为止用MinGW-W64亲自制作的一些亮点列表:

我认为能够构建如此庞大且多样化的代码库,如64位目标和良好的旧GCC for Windows,是MinGW-w64开发团队的一项奇迹般的成就。它再一次证明了工具链的质量。

Qt 5


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

注意:
重新发明轮子(维护Qt的个人构建脚本和补丁)似乎不合理。 MSYS2(见下文)现在负责 here 。也就是说,如果您需要使用不同的选项和/或标记重建Qt,那么只需在本地编辑相应的 everything 文件并使用 PKGBUILD 相应的效用。

注意:
实际上,Qt项目 makepkg-mingw

关于MSYS2


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

那些使用原始 officially recommends using MinGW-w64 and MSYS2 的人可能知道它的年龄。它已经很久没有改进了,所有的Unix实用程序已经非常过时了。

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

注意:
请务必检查 here 以便顺利开始。

MinGW-w64以外的短篇小说


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

答案 1 :(得分:8)

核心语言明智,Clang 3.3和GCC 4.8.1已经完全符合C ++ 11(无论它们是否是无错误是另一个话题)。 图书馆(STL)明智,Clang 3.3(使用libc ++,但你知道,libc ++在windows和linux中都不可用)是唯一完全符合C ++ 11的平台。

MSVC,最新的Visual C ++ 2013(目前是RC,将在2天内完成RTM,将于11月13日推出)在核心语言和STL方面为C ++ 11提供了更好的支持,认为还不完整。 STL明智的,afaik,它是完整的。

我认为这取决于您的代码真正使用的功能。是否已使用所有C ++ 11新功能?如果Visual C ++ 2013的功能集可以满足您,请尝试它。 否则,clang已经提供了一个可以集成到Visual Studio的Windows端口,并且可以链接到本机(msvc c ++运行时)库(已声明),我想你也可以试用它。

增加:Visual C ++ 11/14一致性路线图 https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1

答案 2 :(得分:0)

Clang完全支持windows(libc ++中的模块化Windows标准库错误) 你可以从这里下载clang 3.3的“官方”windows版本:http://www.llvm.org/builds/

它不包含libc ++,因此您需要下载该选择的标准库。如果可能的话,我建议使用libc ++,因为这是目前最完整的库实现,尽管我不知道它在windows上的工作情况。