web-dev-qa-db-ja.com

WindowsのClang

まず第一に、私は "Getting Started:Building and Running Clang" に従いました。特に、「Visual Studioの使用」セクションに従って作成しました。つまり、Visual Studio 2010を使用してビルドしました。

次に、MinGWディストリビューションへのインクルードパスとライブラリパスを手動で設定しました。

enter image description here

コンパイルしようとしている単純なプログラム:

#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.  

明白な質問は-なぜ私はこれを手に入れるのですか?

さらに、詳細を知りたいので、ClangのWebサイトでは非常に簡潔な情報を提供しています。誰かに次の質問を明確にしてもらえると思いました。

  1. 私が理解している限り、Clangには独自の標準ライブラリーがありません(stdc ++でしょうね)。そのため、MinGWのヘッダーとライブラリを使用する必要があります-正しいですか?
  2. Visual StudioとMinGWを使用してClangを構築することの違いは何ですか?
  3. インクルードパスをclang/lib/Frontend/InitHeaderSearch.cppにハードコードする必要がありますか、それともスキップして、上のスクリーンショットのように後で「-I」オプションを使用してこれらのパスを指定できますか?
23

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


[〜#〜] edit [〜#〜]:Clangを伴うdw2バージョンのGCC(32ビットのみ)をビルドしました。このビルドでは例外が機能するため、Windows上でClangを使用して実際のC++のものをビルドできます。 ここでバージョン3.2を取得

32
rubenvb

明白な答えは、-fno-ms-compatibilityをclang ++:Pに送信するのを忘れたことです。

  1. あなたが正しいです。
  2. VC++はGUIツールチェーンで、MinGWはキャラクターコンソールです。
  3. いいえ、clangは十分に成熟していて、安定して消費できるので、開発チームにコードの作業を任せてください。あなたの例が示唆するように、私は-Iを使用しています。

私はVSを使用してWindowsアプリの開発を行っており、clang + CodeBlocksを使用してプラットフォームのドメインに中立な側面を共有しています。

1
Chawathe Vipul