Windows C ++编译器与完整的C + + 11支持(应与Qt合作)
哪个C ++编译器目前在Windows平台上具有完整的 C ++ 11支持?
微软编译器目前没有完整的C ++ 11支持(并且不会很快join)。
MinGW g ++(来自mingw.org)不支持开箱即用的std::thread
。 它也无法编译Qt 4源代码(在构buildQtGuid4.dll时耗尽内存,已知的解决方法对我来说不起作用)。
我已经浪费了几天的时间,试图在Windows上进行叮当声工作,设法编译它,但无法启用c ++ 11支持,因为它需要libstdc ++(我认为)那时没有移植到Windows平台。 它也不被Qt 4支持。
那里还有什么? 我一直在为C ++ 03工作很长一段时间,我想给新的function一个旋风,但我并不真的想要一个不完整的支持工具(这会增加额外的头痛,而写一个代码),或者在链接库时可能会耗尽内存(在8GB系统上)。
我正在使用Windows 7 64位,虽然有64位支持将是不错的,我最感兴趣的是32位应用程序,所以生产64位可执行文件的能力是可选的。
有什么build议么?
首先,请参阅GCC 4.8中的“实验C ++ 11支持状态” 。 只有一个提案尚未正式实施。 然后,看看libstdc++
中C ++ 11的实现状态 。 正如你所看到的一些function还没有实现。 不过,我们可以说GCC中的C ++ 11支持或多或less是完整可用的。
现在,关于Windows: 可能绝对是GCC最好的本地 (而不是Cygwin !)端口,我个人认为是生产质量,是MinGW-w64 。 你可以在这里下载。 目前(撰写本文时)最新版本基于GCC 4.8.2。 它已经支持std::thread
。 更重要的是,它提供了所有可能的变化:
- 64位目标;
- 32位目标;
- Win32线程;
- POSIX线程;
- SEH例外;
- DWARF例外;
- SJLJ例外。
注意:
select要下载的发行版时要小心: std::thread
可用,需要使用POSIX线程。
此外,我确认我已经多次构build了Qt 4.8.4和4.8.5,甚至使用此工具链定位到64位。 但这还不是全部,下面列出了我个人用MinGW-w64制作的一些亮点:
- Boost C ++库 ;
- Qt ;
- LLVM / Clang ;
- Google V8 JavaScript引擎 ;
- ODB:C ++对象关系映射(ORM) ;
- SQLite ;
- GLEW ;
- Vim ;
- ncurses ;
- 等等…
我认为能够构build像64位目标这样庞大而多样化的代码库,对于Windows来说是一个很好的老GCC,这是MinGW-w64开发团队的一个奇迹。 它再一次certificate了工具链的质量。
Qt 5
我最近使用MinGW-w64 4.8.2构build了Qt 5.1.1,目标是x64。 总而言之,这一切都非常顺利,但在构build之前还有一些小问题需要修补。 我轻轻地收集了所有需要的补丁,并使用一个简单的批处理脚本来自动完成修补,构build和安装的整个过程。 如果您有兴趣,请查看我的Qt for Windows 。 用法很简单,我将跳过评论,只是让你们读取批处理脚本。 请记住,您需要使用Unix的patch.exe
来应用您可能获得的补丁,例如,从MSYS或MSYS2(请参阅下文)。 你可以在这里获得Qt 5.1.1的源代码。
注意:
重新发明轮子(为Qt维护个人构build脚本和补丁)似乎不合理。 MSYS2(见下文)现在照顾一切 。 也就是说,如果您需要使用不同的选项和/或标志来重buildQt,那么只需在本地编辑相应的PKGBUILD
文件,然后相应地使用makepkg-mingw
工具。
注意:
其实Qt项目正式推荐使用MinGW-w64和MSYS2 。
关于MSYS2
这不是直接要求的,但是我想在这里添加它,因为这是MinGW-w64的姊妹项目,对于任何需要使用类似Unix的环境开发本地 Windows软件的人来说都是非常有用的。
那些曾经使用过原始MSYS的人可能知道它有多大。 它已经有很长时间没有改进,所有的Unix工具已经过时了。
提供MinGW-w64(上面列出的)版本的人,现在也提供MSYS2版本 ,你可以在这里下载。 最近它发布了beta版,所以一定要检查最新版本。 它是为x86和x64体系结构(使用MinGW-w64工具链本身)而构build的。 所有的实用程序都更新到最新版本。 比如,你已经可以享受到:Bash 4.2,Make 3.99,Git 1.8.4,等等。 在Windows上本机运行的开箱即用!
注意:
请确保检查他们的Wiki有一个平稳的开始。
MinGW-w64之外的短篇小说
最初的MinGW在改进方面进展缓慢,开发人员甚至没有考虑添加64位目标生成支持。 一个雄心勃勃的人,凯蒂兹接pipe了它,并分享了他的公司需要在Windows上构build64位目标。 这就是MinGW-w64项目的诞生。 虽然主要目标是添加64位支持,但是开发人员已经在很多方面改进了工具链,并解决了很多其他问题。 从那时起,MinGW-W64项目已经发展壮大,现在在质量方面远远领先于MinGW。 当MinGW-W64向MinGW提出join房屋并一起工作时,MinGW的开发商反应不足,拒绝合作。 因此,今天有两个名称相似的项目有时会引起混淆,但是质量和支持的差异说明了一切。
核心语言方面,Clang 3.3和GCC 4.8.1已经完全符合C ++ 11的要求(无论它们是没有bug的还是另一个话题)。 图书馆(STL)明智的,Clang 3.3(与libc ++,但你知道,libc ++不能在Windows和Linux都可用)是唯一完全符合C ++ 11的平台。
最新的Visual C ++ 2013(现在的RC,将在2天内成为RTM,11月13日通用)将为MSVC提供核心语言和STL中更好的C ++ 11支持。 STL明智,afaik,它是完整的。
我认为这取决于你的代码真正使用的function。 是否已经使用了所有C ++ 11新function? 如果Visual C ++ 2013的function集可以满足您,请尝试使用它。 否则,铿锵已经提供了一个Windows端口,可以集成到Visual Studio,并可以链接到本地(MSVC C ++运行时)库已经(声称),我想你也可以试用一下。
此外:可视C ++14分之11一致性路线图y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png
铿锵有完整的Windows支持(在Windows库libc ++的标准库模块错误)您可以从这里下载一个“官方”的叮当3.3的窗口构build: http : //www.llvm.org/builds/
它不包括libc ++,所以你需要下载或者你select的标准库。 如果可能的话,我build议使用libc ++,因为这是目前最完整的库实现,尽pipe我不知道它在Windows上的工作情况。