51

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

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

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

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

有什么建议么?

4

3 回答 3

65

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

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

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

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

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

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

qt 5


我最近使用针对 x64 的 MinGW-w64 4.8.2 构建了 Qt 5.1.1。总而言之,它进行得很顺利,但是在构建之前必须修补一些小问题。我轻轻地收集了所有需要的补丁,并使用一个简单的批处理脚本自动完成了修补、构建和安装的整个过程。如果您有兴趣,请查看我的Qt for Windows。用法非常简单,我将跳过对它的评论,只是让你们阅读批处理脚本。请记住,您需要 Unixpatch.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的开发者反应不足,拒绝合作。结果,今天有两个名称相似的项目有时会引起混乱,但质量和支持方面的差异不言而喻。

于 2013-10-17T11:51:23.210 回答
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-UBu7gaao4Rxif?gpsidXY1ksdegao4Rxif?gppsidXY5ksdesi

于 2013-10-17T12:37:43.217 回答
0

Clang 完全支持 Windows(以 libc++ 中的 Windows 标准库错误为模)您可以从此处下载 clang 3.3 的“官方”Windows 构建:http ://www.llvm.org/builds/

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

于 2013-10-17T14:09:05.503 回答