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

标签 c++ windows qt c++11

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




目前哪个 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 位可执行文件的能力是可选的。

有什么建议?

最佳答案

首先看 Status of Experimental C++11 Support in GCC 4.8 .只有一项提案尚未正式实现。那么,看看 Implementation Status of C++11 in libstdc++ .如您所见,有些功能尚未实现。尽管如此,我们可以说 GCC 中的 C++11 支持或多或少是完整和可用的。

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

  • 64 位目标;
  • 32 位目标;
  • Win32 线程;
  • POSIX 线程;
  • SEH 异常(exception);
  • 矮人异常(exception);
  • SJLJ 异常(exception)。

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

    此外,我确认我自己已经多次构建 Qt 4.8.4 和 4.8.5,甚至使用此工具链针对 64 位。但这还不是全部,这里列出了迄今为止我个人使用 MinGW-w64 构建的一些亮点:
  • Boost C++ Libraries ;
  • Qt ;
  • LLVM/Clang ;
  • Google V8 JavaScript Engine ;
  • ODB: C++ Object-Relational Mapping (ORM) ;
  • SQLite ;
  • GLEW ;
  • Vim ;
  • ncurses ;
  • 等等...

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

    Qt 5

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

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

    注意:
    实际上,Qt 项目 officially recommends using MinGW-w64 and MSYS2 .

    关于 MSYS2

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

    那些曾经使用过原版的人 MSYS 大概知道多少岁了。它已经很久没有改进了,所有的 Unix 实用程序都已经过时了。

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

    注意:
    一定要检查他们的 Wiki 有一个顺利的开始。

    超越 MinGW-w64 的短篇小说

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

    关于c++ - 具有完整 C++11 支持的 Windows C++ 编译器(应该与 Qt 一起使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19425482/

    相关文章:

    qt - 如何更改音频 AVPacket 的音量

    Qt5 : show notification popups

    mysql - Windows上的WSL连接到MySQL Server 8无效

    c# - 使用新屏幕的控制台应用程序

    c++ - Automake : what are the valid values for *_la_LDFLAGS in Makefile. 上午?

    c++ - 在 std::vector 中查找索引

    Windows 中的 JavaFx 应用程序未正确显示文本

    c++ - 如何从命令行在 visual studio 中构建 QT 项目

    c++ - QSystemSemaphore::acquire() 中止

    c++ - 用C++做了一个简单的链表,可执行文件太大了?