2012-01-16 13 views
23

まず、私は"Getting Started: Building and Running Clang"に従った。特に、「Visual Studioを使用する」セクションに従って作成しました。Clang on Windows

enter image description here

私がしようとしている簡単なプログラム:つまり、私はMinGWの分布に含めるとライブラリパス第二に、私は手動で設定しているのVisual Studioに2010

を使用して構築されてきましたコンパイル:

#include <iostream> 
using namespace std; 

int main() { 
    cout << "Hello, World!" << endl; 
    return 0; 
} 

私は、コンパイラから、次のフィードバックを得る:

In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41: 
In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41: 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace 
    using ::fgetws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace 
    using ::fputws; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace 
    using ::getwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace 
    using ::getwchar; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace 
    using ::putwc; 
     ~~^ 
C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace 
    using ::putwchar; 
     ~~^ 
6 errors generated. 
Build error occurred, build is stopped 
Time consumed: 646 ms. 

明白な質問は、なぜこれを取得するのですか?

また、私は詳細をお知りになりたい、とクランのウェブサイトは非常に簡単な情報を提供し、以来 - 私は誰かが私に以下の質問を明確にできることを考えた:

  1. 私の知る限りはクランにはない理解して独自の標準ライブラリを持っています(stdC++と思われますか?)。だから私はMinGWのヘッダとライブラリを使わなければならないのです - そうですか?
  2. Visual StudioとMinGWでClangをビルドすることの違いは何ですか?
  3. clang/lib/Frontend/InitHeaderSearch.cppにハードコードパスを含める必要がありますか、それをスキップして、上記のスクリーンショットのように後で "-I"オプションを使用してパスを指定することはできますか?
+2

私が過去に取り組んだのは、MinGWのインクルードフォルダへのパスを含めるようにInitHeaderSearch.cppを変更し、MinGWツールチェーンを使用してビルドすることです。私はVisual C++ツールチェーンを使ってビルドすることもできましたが、ビルドされたコンパイラにMinGWインストールのヘッダーとライブラリを利用する方法を理解できませんでした(Visual C++ C++標準ライブラリヘッダーはVisual C++固有の機能に幅広く依存しているために使用されます)。 –

+3

それはまさに私が考えていたものです。しかし、私にとって最も大きな混乱は、Visual C++またはMinGWを使ったビルドが、Clangコンパイラの使用時に使用されるインクルードパスとライブラリパスに関連することです。言い換えれば、私はClangをコンパイルした後、これらのパスを自由に選択する必要があります。なぜこれらのパスは私がClangを構築するのに使ったコンパイラに依存するのでしょうか? –

+1

@ JamesMcNellis:Clangは現在VC++ヘッダーを解析できるはずです。唯一の問題のある解析領域はMFC IIRCです。 – rubenvb

答えて

32

MSVSを使用してClangをビルドすると、自動的にデフォルトのVSインクルードパスが検索され、これらのヘッダーが取得されます。これは、libstdC++ヘッダーがエラーを生成している理由です。つまり、VSヘッダーに存在しないC関数をインポートしています。 ClangをC++にVSを使って使用することは今のところ不可能です:ClangのABI(ネームマングリングなど)機能がないためにリンク障害が発生します。それでもMSVS Clangを使用する場合は、MinGWヘッダーを指さないでください。それは、VSヘッダー(C++を含む)を解析しますが、リンクできません。


EDIT:私はクランを伴うGCC(32ビットのみ)のDW2バージョンを構築しています。このビルドでは例外が動作するため、Windows上で今Clangで実際のC++のものを構築することができます。 Get version 3.2 here

+0

そして、私が手動でMinGWを使って手動で構築し、スクリーンショットのように手動でパスを追加するとどうなりますか? –

+1

あらかじめビルドされたclangのバイナリパッケージ? –

+0

@ Mr.Anubis:そうですね、GCCの各バージョン用にWindowsのClangをビルドしました。一人で使うことはできません。 – rubenvb

1

明白な答えは、あなたが++打ち鳴らすために-fno-MS-互換性を送信するのを忘れている:P

  1. あなたが正しいです。
  2. VC++はGUIツールチェーンであり、MinGWは文字コンソールです。
  3. 一般的な消費のために十分成熟していますが、安定しているので、開発チームはコードを操作しないと、紛失した島になる可能性があります。私はあなたの例が示唆するように-Iを使用しています。

私は、VSを使用してWindowsアプリケーションデベロッパーをやっており、clang + CodeBlocksを使用して、中立からプラットフォームのドメインを共有しています。

+1

VC++ <-> MinGW。 VC++はGUIではありません。それはコマンドラインインターフェイスを持っています。 – rubenvb

+0

"GUIツールチェーン"はGUIではありません。 GUIを備えたツールチェーンは、デフォルトインストールに含まれています。 –