web-dev-qa-db-ja.com

C ++ 11を完全にサポートするWindows C ++コンパイラ(Qtで動作するはずです)

Windowsプラットフォームで現在どのC++コンパイラがcomplete C++ 11をサポートしていますか?

Microsoftコンパイラーは現在、C++ 11を完全にサポートしていません(すぐには追加されません)。
MinGW g ++(mingw.orgから)はstd::thread箱から出してすぐに。また、Qt 4ソースをコンパイルできません(QtGuid4.dllのビルド中にメモリ不足になります。既知の回避策は機能しませんでした)。
Windowsでclangを動作させるために数日を無駄にしたため、コンパイルできましたが、Windowsプラットフォームに移植されていなかったlibstdc ++が必要だったため、c ++ 11サポートを有効にできませんでしたその瞬間に。また、Qt 4ではサポートされていません。

他には何があるの?私は長い間C++ 03で働いていましたが、新しい機能を旋回させたいと思いますが、サポートが不完全なツールは本当に欲しくありません(執筆中に余分な頭痛を追加します)コード)またはライブラリのリンク中にメモリ不足(8GBシステム)が発生する可能性があります。

私はWindows 7 64ビットに取り組んでおり、64ビットをサポートしていればいいのですが、32ビットアプリケーションに主に興味があるので、64ビットの実行可能ファイルを生成する機能はオプションです。

助言がありますか?

51
SigTerm

まず、GCC 4.8での実験的なC++ 11サポートのステータスを参照してください。公式にはまだ1つの提案のみが実装されています。次に、libstdc++のC++ 11の実装ステータスを見てください。ご覧のとおり、いくつかの機能はまだ実装されていません。それでも、GCCでのC++ 11サポートは多かれ少なかれcompleteであり、使用可能であると言えます。

さて、Windowsについて: 多分 間違いなく最高のnative(notCygwin!)port of[〜#〜] gcc [〜#〜]、私は個人的に生産品質と考えていますが、MinGW-w64。ダウンロードできますhere。現在(執筆時点)の最新バージョンはGCC 4.8.2に基づいています。既にstd::threadをサポートしています。さらに、すべての可能なバリエーションを提供します:

  • 64ビットターゲット。
  • 32ビットターゲット。
  • Win32スレッド。
  • POSIXスレッド。
  • SEH例外;
  • DWARF例外;
  • 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を構築しました。全体として、かなりスムーズに進みましたが、ビルドの前にパッチを適用する必要があるいくつかの小さな問題があります。必要なすべてのパッチを丁寧に収集し、簡単なバッチスクリプトを使用して、パッチ適用、ビルド、およびインストールのプロセス全体を自動化しました。興味のある方は、myQt for Windowsをご覧ください。使い方は非常に簡単なので、コメントは省略し、バッチスクリプトを読んでもらいます。たとえば、MSYSまたはMSYS2から入手できるパッチを適用するには、Unixのpatch.exeが必要であることに注意してください(以下を参照)。 Qt 5.1.1のソースコードここを入手できます。

注:
ホイール(Qtの個人用ビルドスクリプトとパッチを維持する)を再発明することはもう合理的ではないようです。 MSYS2(下記参照)がすべてを処理するようになりました。つまり、異なるオプションやフラグでQtを再構築する必要がある場合、対応するPKGBUILDファイルをローカルで編集して使用するだけです。 makepkg-mingwユーティリティ.

注:
実際には、QtプロジェクトMinGW-w64およびMSYS2の使用を公式に推奨しています

MSYS2について


これは直接尋ねられたわけではありませんが、これはMinGW-w64の姉妹プロジェクトであり、Unixを使用してWindows用のnativeソフトウェアを開発しなければならない人にとって非常に有用であるため、ここに追加する気がしますのような環境。

オリジナル[〜#〜] 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の開発者は不適切な反応を示し、協力を拒否しました。その結果、今日は混乱を引き起こすことがある類似した名前のプロジェクトが2つありますが、品質とサポートの違いがそれを物語っています。

65

コア言語に関しては、Clang 3.3とGCC 4.8.1はすでに完全にC++ 11に準拠しています(バグがないかどうかは別のトピックです)。ライブラリ(STL)に関しては、Clang 3.3(libc ++を使用しますが、libc ++はWindowsとLinuxの両方でまだ使用できません)は、C++ 11に完全に準拠する唯一のプラットフォームです。

最新のVisual C++ 2013であるMSVC(現在のRCは、2日以内にRTMとなり、11月13日に一般利用可能)は、コア言語とSTL、まだ完成していないと考えられていました。

これは、コードが実際に使用する機能に依存すると思います。すべてのC++ 11新機能が利用されましたか? Visual C++ 2013の機能セットで満足できる場合は、試してください。それ以外の場合、clangはVisual Studioに統合できるWindowsポートを既に提供しており、ネイティブ(msvc c ++ランタイム)ライブラリに既にリンク(要求)できます。試用版も提供できると思います。

追加:ビジュアルC++ 11月14日の適合性のロードマップ https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1

8
JC_Yang

ClangはWindowsを完全にサポートしています(libc ++のモジュロWindows標準ライブラリのバグ)ここからclang 3.3の「公式」Windowsビルドをダウンロードできます。 http://www.llvm.org/builds/

Libc ++は含まれていないため、そのライブラリまたは選択した標準ライブラリをダウンロードする必要があります。 libc ++を使用することをお勧めします。これは現在、これが最も完全なライブラリ実装であるためです。ただし、Windowsでどのように機能するかはわかりません。

0