2012-10-29 10 views
5

Windowsでclang 3.2をビルドし、単純なhello worldプログラムを作成しようとしていました。しかし、私は以下のような多くのエラーを取得します。Windowsでclangを使用してC++ 11プログラムをコンパイルする際にエラーが発生する

d:\Marius\xyz>clang++ -stdlib=libc++ -std=c++11 -Wall xyz.cpp -o xyz.exe 
clang++: warning: argument unused during compilation: '-stdlib=libc++' 
In file included from xyz.cpp:12: 
In file included from ./stdafx.h:18: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory:6: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0:9: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility:8: 
In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\utility:8: 
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:1072: 
33: error: 
    '_Ty' does not refer to a value 
      _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty) 
             ^

... 

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef:540:50: note: 
     expanded from macro '_VARIADIC_EXPAND_4' 
#define _VARIADIC_EXPAND_4(FUNC, X1, X2, X3, X4) \ 
               ^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xrefwrap:222:22:note: 
     expanded from macro '_CLASS_RESULT_OF_PMF_OPT_0X' 
         __thiscall, X2, X3, X4) 
             ^
fatal error: too many errors emitted, stopping now [-ferror-limit=] 
20 errors generated. 

VC++ 2012ヘッダーのようなエラーが発生します。 Windows上でclang ++を使ってC++ 11のコードを構築することは可能ですか?追加のコマンドスイッチを用意する必要がありますか? Visual Studioのことで構築されたときにクランが正常に動作しない

+0

'-fms-extensions'かもしれません。 – arrowd

+0

ユーザーマニュアル(http://clang.llvm.org/docs/UsersManual.html)によると、フラグはデフォルトで有効になっています。私も-fmsc-version = 1700(つまりVS2012)と-fdelayed-template-parsing(これもデフォルトでなければならない)を設定しようとしました。検索結果はありません。 stdafx.hを削除しても、コンパイルエラーには影響しません。 –

+0

私も-isystemでmingwヘッダを使ってみましたが、これは設定の悪夢のようです。インクルードの順番によっては、異なるエラーが発生し、コンパイルエラーなしで注文をセットアップすることができませんでした。 –

答えて

2

は(MinGWので構築されたとき、おそらくそれは動作しますが、私は自分自身ていることを確認することができていません)。

Clangがビルドされると、ビルドに使用されたライブラリを使用するように設定されます。 Visual Studioを使用してClangを構築して以来、ClangはVisual Studioのヘッダとライブラリを使用しようとします。残念ながら、ClangとVisual Studioの内部は、Clang がVS固有のヘッダーを使用することができないほど十分に異なります。 Visual Studioでコンパイルしたときlibc++まで

は、Windows用にコンパイルすることができ、クランは(ほぼ確実に)動作しません。 MinGWを使ってビルドしてみてください(そして、あなたが行った方法についてブログ記事や何かを作ってください!)、それがあなたに役立つかどうかを見てください。

0

clangのデフォルトは、ビルドに使用されたツールチェーンのインクルードになります。しかし、MSの場合のように、使用される拡張子はベンダー固有のものであってもよい。 clang自身のlibC++の可用性は、この問題を大幅に緩和すると期待されています。正しい組み込みディレクトリを手動で指定します。

ビルド時にもコンパイルとリンクの段階が別々に行われます。これにより、リンクはVSのデフォルトよりも正しいバイナリlibsになります。

関連する問題