完全支持C++11的Windows C++编译器(应与Qt一起使用)
Windows C++ compiler with full C++11 support (should work with Qt)
当前哪个C++编译器在windows平台上支持完整的C++11?
微软编译器目前还没有完全的C++11支持(而且不会很快添加)
MinGW g++(来自MinGW.org)不支持开箱即用的std::thread
。它也无法编译Qt4源代码(在构建QtGuid4.dll时内存不足,已知的解决方法对我不起作用)
我花了几天时间试图让clang在windows上运行,并设法编译了它,但无法启用c++11支持,因为它需要libstdc++,而当时(我认为)没有移植到windows平台。Qt 4也不支持它。
还有什么?我已经为C++03工作了很长时间,我想尝试一下新功能,但我真的不想要一个支持不完整的工具(这会在编写代码时增加额外的头痛),或者在链接库时可能会耗尽内存(在8GB系统上)。
我正在开发Windows7 64位,虽然有64位的支持会很好,但我最感兴趣的是32位的应用程序,所以生成64位可执行文件的能力是可选的。
有什么建议吗?
首先,请参阅GCC 4.8中的实验性C++11支持状态。只有一个提议尚未正式实施。然后,查看C++11在libstdc++
中的实现状态。正如您所看到的,一些功能尚未实现。尽管如此,我们可以声明GCC中的C++11支持或多或少是完整的并且可用的。
现在,关于Windows:可能肯定是GCC最好的原生(不是Cygwin!)端口,我个人认为它的生产质量是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构建的一些亮点列表:
- 增强C++库
- Qt
- LLVM/Clang
- 谷歌V8 JavaScript引擎
- ODB:C++对象关系映射(ORM)
- SQLite
- GLEW
- Vim
- ncurses
- 等等
我认为能够用良好的旧GCC for Windows构建64位目标这样庞大而多样的代码库是MinGW-w64开发团队的一项奇迹般的成就。它再次证明了工具链的质量。
问题5
我最近使用针对x64的MinGW-w64 4.8.2构建了Qt 5.1.1。总的来说,它进行得相当顺利,但有一些小问题必须在构建之前进行修补。我已经温和地收集了所有需要的补丁,并使用一个简单的批处理脚本自动化了补丁、构建和安装的整个过程。如果您感兴趣,请查看我的Qt for Windows。用法非常简单,我将跳过对它的评论,只让你们阅读批处理脚本。请记住,您需要Unix的patch.exe
来应用您可以从MSYS或MSYS2获得的补丁(请参阅下文)。您可以在此处获取Qt 5.1.1源代码。
注意:
重新发明轮子(为Qt维护个人构建脚本和补丁)似乎不再合理。MSYS2(见下文)现在负责所有。也就是说,如果您需要使用不同的选项和/或标志重建Qt,那么只需在本地编辑相应的PKGBUILD
文件,并相应地使用makepkg-mingw
实用程序。
注意:
实际上,Qt项目正式建议使用MinGW-w64和MSYS2。
关于MSYS2
这不是直接问的,但我想在这里添加它,因为这是MinGW-w64的姊妹项目,它对任何必须使用类Unix环境为Windows开发原生软件的人都非常有用。
那些曾经使用过原始MSYS的人可能知道它有多旧。它已经很久没有改进了,那里所有的Unix实用程序都已经过时了。
提供MinGW-w64版本(如上所列)的人,现在也提供MSYS2版本,您可以在此处下载。最近,它推出了测试版,所以一定要查看最新版本。它是为x86和x64体系结构构建的(使用MinGW-w64工具链本身)。所有实用程序都会更新到其最新版本。例如,您已经可以享受Bash 4.2、Make 3.99、Git 1.8.4等等;它在开箱即用的Windows上本地运行!
注意:
请确保检查他们的Wiki以顺利开始。
超越MinGW-w64的短篇小说
最初的MinGW改进非常缓慢,其开发人员甚至没有考虑添加64位目标生成支持。一个雄心勃勃的家伙Kai Tietz接管了它,并在他的公司需要在Windows上构建64位目标时将其分叉。MinGW-w64项目就是这样诞生的。尽管主要目标是添加64位支持,但开发人员已经在许多方面改进了工具链,并解决了许多其他问题。从那时起,MinGW-w64项目不断发展,现在在质量方面远远领先于MinGW。当MinGW-w64向MinGW提议加入房屋并共同合作时,MinGW的开发商反应不足,拒绝合作。因此,今天有两个项目的名称相似,有时会引起混乱,但质量和支持方面的差异不言自明。
核心语言方面,Clang 3.3和GCC 4.8.1已经完全符合C++11(它们是否没有bug是另一个主题)。就库(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++运行时)库,我想你也可以试用一下。
添加:Visual C++11/14一致性路线图https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1
Clang完全支持windows(libc++中的模块化windows标准库错误)你可以从这里下载clang 3.3的"官方"windows版本:http://www.llvm.org/builds/
它不包括libc++,所以您需要下载它或您选择的标准库。如果可能的话,我建议使用libc++,因为这是目前最完整的库实现,尽管我不知道它在windows上的效果如何。
- Qt QGraphicsProxyWidget 与 QGraphicsScene 的交互
- Vtk Qt场景与>50(移动)演员
- 哪个强制转换应与模板类参数一起使用,dynamic_cast或reinterpet_cast?
- 当将QT创建者与CMAKE一起使用时,为什么我不必手动链接MSVC库
- Qt项目与自定义共享库交叉编译Qt
- QT HTML 与对齐不起作用
- 在阅读Android中,nosuchmethoderror与JNI在QT上与JNI
- 如何将QT Combobox与PushButton和某种显示图片的小部件连接
- OPENCV:在VS2015 X64构建中,使用cvfontqt的QT库与cvfontqt和cvaddtext上使用QT
- Qt有与Boost的分配模块等效的东西吗?
- 如何将Qt属性与自定义类一起使用
- 将 Qt Creator 与 Allegro 结合使用
- 将 Qt 对象与 std::shared_ptr 一起使用
- 完全支持C++11的Windows C++编译器(应与Qt一起使用)
- 所有公共方法都应与业务逻辑相对应
- QT QDebug 与 QIODevice 不起作用
- 如何将新的Qt窗口与现有的X应用程序集成
- C++Qt RegExp与@、|或^等特殊字符不匹配
- Qt 5.5程序与QStringListModel崩溃
- Qt网格与QgraphicsItems拖放