4

http://clang.llvm.org/get_started.htmlの指示に従いました

MSVC 2010 で llvm と clang の最新のトランクをコンパイルしました。今では Clang で簡単なプログラムをコンパイルできますが、このプログラムをコンパイルしようとすると、多くのエラーが発生しました。ここにプログラムがあります:

#include <algorithm>
int main(){ return 0; }

そして、ここにいくつかのエラーがあります:

In file included from hello.cpp:1:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\algorithm:6:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\memory:987:
In file included from C:\Program Files\Microsoft Visual Studio 10.0\VC\include\intrin.h:24:
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\immintrin.h:32:
In file included from H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\xmmintrin.h:988:
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1384:22: error: expected expression
  return (__m128)__in;
                     ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1390:23: error: expected expression
  return (__m128i)__in;
                      ^
H:/LLVM/build/bin/Debug/../lib/clang/3.3/include\emmintrin.h:1396:23: error: expected expression
  return (__m128d)__in;
                      ^

Clang からの完全な出力: http://pastebin.com/qi87K8qr

Clang は MSVC ヘッダーを使用しようとしますが、機能しません。代わりに libc++ または libstdc++ を使用する必要があるかもしれませんが、その方法は?

コンパイル済みのclangバイナリには興味がないことに注意してください

4

5 に答える 5

4

はい、clangはMicrosoftの拡張C ++構文のすべてをサポートしているわけではないため、その構文を使用するMicrosoftのC++ヘッダーを解析することはできません。それだけでなく、ClangはMicrosoftのC ++ ABI、名前マングリングなどを完全にサポートしていません。ただし、Windows上のClangはCで問題なく動作すると思います。

代わりに別のC++標準ライブラリを使用するには、clangに通常のヘッダーとライブラリディレクトリを、IIRC、-nostdinc++およびで無視させることができます-nostdlib++。次に、使用するインクルードディレクトリとライブラリディレクトリをclangに指示できます(-isystemまたはを使用し-Iて)。ただし、libc++とlibstdc++のどちらがそのような状況で機能するかはわかりません。これらは、WindowsCランタイムライブラリにないものに依存している可能性があるためです。

于 2013-02-15T20:38:01.047 に答える
2

Chandler Carruthは、Going Native 2013で、Visual Studio と統合された Windows 用の clang のアルファ版ビルドがあると述べました。ストリームなど、多くのものが壊れています (そのため、古き良き Hello World は機能しません)。ただし、clang を Windows で動作させるために多くの努力が払われているため、かなり速く機能することが期待されます。

于 2013-09-20T05:28:40.880 に答える
0

エラーは、clang 自体で提供されたヘッダーにありました。MMX/SSE タイプを適切に処理できないようです。-msse -msse2 スイッチをコマンド ラインに追加してみてください。

于 2013-02-20T23:19:52.893 に答える
0

私はlibstdc ++を使用しており、デスクトップ用のVS2012Expressを使用してclangを構築しています。cmake 文字列は「Visual Studio 11 Win64」であり、重要なディレクトリです。-I 引数を使用して指定します。

于 2013-03-04T13:18:10.397 に答える
0

Windows用のmingwヘッダーを使用した場合、プログラムは機能すると思います。

于 2013-08-22T10:51:23.330 に答える