5

Windows で clang 3.2 をビルドし、単純な hello world プログラムをビルドしようとしていました。しかし、以下のようなエラーがたくさん出ます。

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コードをビルドすることはまったく可能ですか? 追加のコマンド スイッチを提供する必要がありますか?

4

2 に答える 2

3

Clang は、Visual Studio でビルドすると正しく動作しません (MinGW でビルドすると動作すると思われますが、自分では確認できていません)。

Clang がビルドされると、ビルドに使用されたライブラリを使用するように構成されます。Visual Studio を使用して Clang をビルドしたため、Clang は Visual Studio のヘッダーとライブラリを使用しようとします。残念ながら、Clang と Visual Studio の内部構造は大きく異なり、Clangは VS 固有のヘッダーを使用できません。

libc++を Windows 用にコンパイルできるようになるまで、Visual Studio でコンパイルした場合、Clang は (ほぼ確実に) 機能しません。MinGW を使用してビルドしてみてください (そして、それをどのように行ったかについてブログ投稿または何かを作成してください!)、それがうまくいくかどうかを確認してください。

于 2012-10-29T21:33:56.710 に答える
0

clang のデフォルトは、ビルドに使用されたツールチェーンのインクルードです。ただし、MS の場合と同様に、使用される拡張機能はベンダー固有の可能性があります。clang 独自の libc++ の可用性により、この問題が大幅に軽減されることが期待されます。正しいインクルード ディレクトリを手動で指定します。

また、ビルド中にコンパイル ステージとリンク ステージを分離します。これにより、リンクは VS のデフォルトよりも正しいバイナリ ライブラリになります。

于 2013-03-04T12:24:02.093 に答える