問題描述
哪個 C++ 編譯器目前在 Windows 平臺上完整支持 C++11?
Which C++ compiler currently has complete C++11 support on windows platform?
Microsoft 編譯器目前沒有完整的 C++11 支持(并且不會很快添加).
MinGW g++(來自 mingw.org)不支持開箱即用的 std::thread
.它也無法編譯 Qt 4 源(在構建 QtGuid4.dll 時內存不足,已知的解決方法對我不起作用).
我浪費了幾天時間嘗試在 Windows 上使用 clang,設法編譯它,但無法啟用 c++11 支持,因為它需要 libstdc++,(我認為)當時沒有移植到 windows 平臺.Qt 4 也不支持它.
Microsoft compiler currently does not have full C++11 support (and it won't be added any time soon).
MinGW g++ (from mingw.org) does not support std::thread
out of the box. It also can't compile Qt 4 sources (runs out of memory while building QtGuid4.dll, known workarounds didn't work for me).
I've wasted several days trying to make clang work on windows, managed to compile it, but couldn't enable c++11 support because it required libstdc++ which (I think) wasn't ported to windows platform at that moment. It also isn't supported by Qt 4.
還有什么?我已經為 C++03 工作了很長時間,我想嘗試一下新功能,但我真的不想要一個支持不完整的工具(這會在編寫代碼時增加額外的麻煩)代碼)或在鏈接庫時內存不足(在 8GB 系統上).
What else is there? I've been working for C++03 for a long time, and I'd like to give new features a whirl, but I don't really want a tool that with incomplete support (that'll add extra headache while writing a code) or can run out of memory (on 8GB system) while linking a library.
我正在開發 64 位 Windows 7,雖然支持 64 位會很好,但我最感興趣的是 32 位應用程序,因此生成 64 位可執行文件的能力是可選的.
I'm working on windows 7 64bit, and although having 64bit support would be nice, I'm mostly interested in 32bit applications, so ability to produce 64bit executables is optional.
有什么建議嗎?
推薦答案
首先看GCC 4.8 中實驗性 C++11 支持的狀態.只有一項提案尚未正式實施.然后,看看C的實現狀態libstdc++
中的 ++11.如您所見,有些功能尚未實現.盡管如此,我們可以說 GCC 中的 C++11 支持或多或少完整并且可用.
First of all, see Status of Experimental C++11 Support in GCC 4.8. Only one proposal is not officially implemented yet. Then, have a look at Implementation Status of C++11 in libstdc++
. As you can see some features are yet to be implemented. Nevertheless, we can state that C++11 support in GCC is more or less complete and usable.
現在,關于 Windows:可能絕對是最好的原生(不是Cygwin!) GCC 的端口>,我個人認為生產質量是MinGW-w64.您可以在此處下載.當前(在撰寫本文時)最新版本基于 GCC 4.8.2.它已經支持 std::thread
.更重要的是,它提供了所有可能的變化:
Now, concerning Windows: probably definitely the best native (not Cygwin!) port of GCC, which I personally consider production-quality, is MinGW-w64. You can download it here. The current (at the time of writing) latest version is based on GCC 4.8.2. It already has support for std::thread
. What's more, it offers all the possible variations:
- 64 位目標;
- 32 位目標;
- Win32 線程;
- POSIX 線程;
- SEH 例外;
- 矮人異常;
- SJLJ 例外.
注意:
選擇要下載的發行版時要小心:要使 std::thread
可用,您需要具有 POSIX 線程的發行版.
NOTE:
Be careful when choosing which distribution to download: for std::thread
to be available, you need the one with POSIX threads.
此外,我確認我自己已經多次構建 Qt 4.8.4 和 4.8.5,甚至使用此工具鏈針對 64 位.但這還不是全部,這里列出了迄今為止我個人使用 MinGW-w64 構建的一些亮點:
Furthermore, I confirm that I've built Qt 4.8.4 and 4.8.5 myself numerous times and even targeting 64-bit with this toolchain. But that's not all, here is a list of some highlights that I've personally built with MinGW-w64 so far:
- Boost C++ 庫;
- Qt;
- LLVM/Clang;
- Google V8 JavaScript 引擎;
- ODB:C++ 對象關系映射 (ORM);
- SQLite;
- GLEW;
- Vim;
- ncurses;
- 等等...
我認為能夠使用適用于 Windows 的舊 GCC 構建像 64 位目標這樣龐大而多樣的代碼庫是 MinGW-w64 開發團隊的奇跡般的成就.再次證明了工具鏈的質量.
I think being able to build such huge and diverse code bases as 64-bit targets with good old GCC for Windows is a miraculous achievement of MinGW-w64 developer team. It once again proves the quality of the toolchain.
我最近使用面向 x64 的 MinGW-w64 4.8.2 構建了 Qt 5.1.1.總而言之,它進行得很順利,但是在構建之前必須修補一些小問題.我已經輕輕地收集了所有需要的補丁,并使用一個簡單的批處理腳本自動完成了打補丁、構建和安裝的整個過程.如果您有興趣,請查看我的 Qt for Windows.用法非常簡單,我將跳過對其進行評論,而只是讓你們閱讀批處理腳本.請記住,您需要 Unix 的 patch.exe
來應用您可以從 MSYS 或 MSYS2 獲得的補丁(見下文).可以獲取Qt 5.1.1源代碼此處.
I've recently built Qt 5.1.1 using MinGW-w64 4.8.2 targeting x64. All in all, it went pretty smooth, but there are a few minor issues which have to be patched before the build. I've gently collected all the required patches and automated the whole process of patching, building, and installing with a simple batch script. If you are interested, check out my Qt for Windows. The usage is so simple that I'll skip commenting on it and simply let you guys read the batch script. Keep in mind that you need Unix's patch.exe
to apply the patches which you could get, for example, from MSYS or MSYS2 (see below). You can obtain Qt 5.1.1 source code here.
注意:
重新發明輪子(維護 Qt 的個人構建腳本和補丁)似乎不再合理.MSYS2(見下文)現在負責一切一個>.也就是說,如果您需要使用不同的選項和/或標志重建 Qt,那么只需編輯相應的 PKGBUILD
本地文件并使用 makepkg-mingw
實用程序.
NOTE:
Does not seem reasonable to reinvent the wheel (maintaining personal build scripts and patches for Qt) anymore. MSYS2 (see below) now takes care of everything. That is if you need to rebuild Qt with different options and/or flags, then simply edit the corresponding PKGBUILD
file locally and use the makepkg-mingw
utility accordingly.
注意:
其實Qt項目官方推薦使用MinGW-w64和MSYS2.
這不是直接問的,但我想在這里添加它,因為這是MinGW-w64的姊妹項目,對于必須使用Unix為Windows開發本機軟件的人來說非常有用- 類似環境.
This was not asked directly, but I feel like adding it here as this is a sister project of MinGW-w64, and it's very useful for anyone who has to develop native software for Windows using Unix-like environment.
那些曾經使用過原始 MSYS 的人可能知道多少歲了.它已經很久沒有改進了,那里的所有 Unix 實用程序都已經過時了.
Those of you who have ever used the original MSYS probably know how old it is. It hasn't been improved for ages, and all the Unix utilities there are already terribly outdated.
提供 MinGW-w64 構建(如上所列)的人,現在還提供 MSYS2,您可以在此處下載>.最近,它出來了測試版,所以一定要查看最新版本.它是為 x86 和 x64 架構構建的(使用 MinGW-w64 工具鏈本身).所有實用程序都更新為最新版本.例如,您已經可以享受以下內容:Bash 4.2、Make 3.99、Git 1.8.4 等等;開箱即用,在 Windows 上本地運行!
Guys who provide builds of MinGW-w64 (listed above), now also provide builds of MSYS2 which you can download here. Recently, it came out of beta, so be sure to checkout the latest release. It's built for both x86 and x64 architectures (with the MinGW-w64 toolchain itself). All the utilities are updated to their latest versions. For instance, you can already enjoy things like: Bash 4.2, Make 3.99, Git 1.8.4, and many more; which run natively on Windows out of the box!
注意:
請務必查看他們的 Wiki 以順利開始.
NOTE:
Make sure to check their Wiki to have a smooth start.
最初的 MinGW 改進非常緩慢,其開發人員也沒有甚至考慮添加 64 位目標生成支持.由于他的公司需要在 Windows 上構建 64 位目標,一位雄心勃勃的人 Kai Tietz 接管了它并將其分叉.MinGW-w64 項目就是這樣誕生的.盡管主要目標是添加 64 位支持,但開發人員已在許多方面改進了工具鏈并解決了許多其他問題.從那時起,MinGW-w64 項目不斷發展,現在在質量方面遠遠領先于 MinGW.當MinGW-w64向MinGW提出加入房屋一起工作時,MinGW的開發者反應不足,拒絕合作.結果,今天有兩個名稱相似的項目,有時會引起混淆,但質量和支持的差異不言而喻.
The original MinGW was very slow on improvements, and its developers didn't even consider adding 64-bit target generation support. One ambitious guy, Kai Tietz, took over it and forked it as his company needed to build 64-bit targets on Windows. That's how MinGW-w64 project was born. Although the primary goal was to add 64-bit support, the developers have improved the toolchain in many aspects and addressed a great deal of other issues. Since then the MinGW-w64 project has grown and now is far ahead of MinGW in terms of quality. When MinGW-w64 proposed to MinGW to join the houses and work together, the developers of MinGW showed inadequate reaction and refused to cooperate. As a result, today there are 2 projects with similar name what sometimes causes confusion, but the differences in quality and support speak for themselves.
這篇關于具有完整 C++11 支持的 Windows C++ 編譯器(應該與 Qt 一起使用)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!