具有完整 C++11 支持的 Windows C++ 编译器(应与 Qt 一起使用)[关闭]

2024-02-22

目前有哪些C++编译器completeWindows 平台上支持 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 位可执行文件的能力是可选的。

有什么建议么?


首先,请参阅GCC 4.8 中实验性 C++11 支持的状态 http://gcc.gnu.org/gcc-4.8/cxx0x_status.html。只有一项提案尚未正式实施。然后,看看C++11 的实现状态libstdc++ http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011。正如您所看到的,一些功能尚未实现。尽管如此,我们可以说 GCC 对 C++11 的支持或多或少complete并可用。

现在,关于 Windows:可能 绝对是最好的native (not Cygwin http://www.cygwin.com/!) 港口GCC http://gcc.gnu.org/,我个人认为生产质量是明GW-w64 http://mingw-w64.sourceforge.net/。你可以下载它here http://mingw-w64.sourceforge.net/download.php#mingw-builds。当前(在撰写本文时)最新版本基于 GCC 4.8.2。它已经支持std::thread。更重要的是,它提供了所有可能的变化:

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

NOTE:
选择下载哪个发行版时要小心:std::thread为了可用,您需要具有 POSIX 线程的线程。

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

  • Boost C++ 库 http://www.boost.org/;
  • Qt http://www.qt.io/;
  • LLVM/铿锵 http://clang.llvm.org/;
  • 谷歌 V8 JavaScript 引擎 https://code.google.com/p/v8/;
  • ODB:C++ 对象关系映射 (ORM) http://www.codesynthesis.com/products/odb/;
  • SQLite http://www.sqlite.org/;
  • GLEW http://glew.sourceforge.net/;
  • Vim http://www.vim.org/;
  • ncurses http://www.gnu.org/software/ncurses/;
  • etc...

我认为能够使用适用于 Windows 的旧 GCC 构建如此庞大且多样化的代码库(如 64 位目标)是 MinGW-w64 开发团队的奇迹般的成就。再次证明了工具链的质量。

Qt 5


我最近使用面向 x64 的 MinGW-w64 4.8.2 构建了 Qt 5.1.1。总而言之,一切进展顺利,但有一些小问题需要在构建之前修复。我已经收集了所有必需的补丁,并使用一个简单的批处理脚本自动化了修补、构建和安装的整个过程。如果您有兴趣,请查看我的适用于 Windows 的 Qt https://bitbucket.org/Alexander-Shukaev/qt-for-windows。用法非常简单,我将跳过对其进行评论,只是让你们阅读批处理脚本。请记住,您需要 Unixpatch.exe应用您可以从 MSYS 或 MSYS2 等处获得的补丁(见下文)。您可以获得Qt 5.1.1源代码here http://download.qt.io/archive/qt/5.1/5.1.1/single/qt-everywhere-opensource-src-5.1.1.zip.

NOTE:
重新发明轮子(维护 Qt 的个人构建脚本和补丁)似乎不再合理。 MSYS2(见下文)现在负责一切 http://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-qt5。也就是说,如果您需要使用不同的选项和/或标志重建 Qt,则只需编辑相应的PKGBUILD http://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-qt5/PKGBUILD本地文件并使用makepkg-mingw http://sourceforge.net/p/msys2/wiki/Contributing%20to%20MSYS2/相应的效用。

NOTE:
实际上,Qt项目官方推荐使用MinGW-w64和MSYS2 http://wiki.qt.io/MinGW-64-bit.

关于MSYS2


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

那些曾经使用过原版的人MSYS http://www.mingw.org/wiki/MSYS大概知道它有多大了。它已经很久没有得到改进了,而且所有的 Unix 实用程序都已经过时了。

提供 MinGW-w64 版本(上面列出)的人现在还提供MSYS2 http://sourceforge.net/projects/msys2/你可以下载here http://sourceforge.net/projects/msys2/files/Base/。最近,它已经结束测试版,因此请务必查看最新版本。它是为 x86 和 x64 架构构建的(带有 MinGW-w64 工具链本身)。所有实用程序均已更新至最新版本。例如,您已经可以享受以下内容:Bash 4.2、Make 3.99、Git 1.8.4 等等;开箱即用,可在 Windows 上本机运行!

NOTE:
请务必检查他们的Wiki http://sourceforge.net/p/msys2/wiki/Home/有一个顺利的开始。

超越 MinGW-w64 的短篇故事


原本的MinGW http://www.mingw.org/改进非常缓慢,其开发人员甚至没有考虑添加 64 位目标生成支持。一位雄心勃勃的人 Kai Tietz 接管了它并分叉了它,因为他的公司需要在 Windows 上构建 64 位目标。这就是 MinGW-w64 项目的诞生。尽管主要目标是添加 64 位支持,但开发人员在许多方面改进了工具链并解决了大量其他问题。从那时起,MinGW-w64 项目不断发展,现在在质量方面远远领先于 MinGW。当 MinGW-w64 向 MinGW 提议加入房屋并共同努力,MinGW的开发者表现出反应不足,拒绝合作。因此,今天有两个项目名称相似,有时会造成混乱,但质量和支持方面的差异是不言而喻的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有完整 C++11 支持的 Windows C++ 编译器(应与 Qt 一起使用)[关闭] 的相关文章

  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐