web-dev-qa-db-ja.com

ClangをWindowsで動作させる

私は次の手順に従いました ステップバイステップガイド 少しいじってから、code:blocksとMinGWを使用してclangをコンパイルするように管理しました。素晴らしいので、今度はClangモジュールをEclipseに追加して(IDEを4つ持つことができる場合))、コンパイルを開始できます。

標準ライブラリを使用しないシンプルなプログラムをコンパイルできますが、残念ながらこれをコンパイルしようとすると:

#include <iostream>
using namespace std;

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

まず最初にこれを取得します:

..\src\test.cpp:9:10:致命的なエラー: 'iostream'ファイルが見つかりません

そこで、Mingwヘッダーをインクルードパスに追加します。その後、私はこれを取得します:

「致命的なエラー:「bits/c ++ config.h」ファイルが見つかりません」

変です。そのファイルが「bits /」にない場合、なぜMingWは機能しますか?コンパイラに組み込まれていますか?気にしないで、私はそれの実装を見つけて、「bits /」にファイルを作成します。

それから、clangがプリプロセッサを正しく実装していないか、プリプロセッサの私の理解が間違っていることを示唆しているような奇妙なエラーを含む、大量のエラーが発生します。

C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression
#if _GLIBCXX_HAVE_WCHAR_H

その他多くのこと。それは

#if defined(_GLIBCXX_HAVE_WCHAR_H) 

または

#ifdef _GLIBCXX_HAVE_WCHAR_H?

その場合、MinGW標準ライブラリは間違っています。

私は、gccを置き換えるためにclangを落とすことができ、gnu標準ライブラリで動作するように設計されていないと仮定するのは間違っていると思います。証拠で裏付けられたこれの確認または拒否は大歓迎です!

だから、誰かがWindows PCでclangをコンパイルするための絶対確実な方法を持っていますか? clang、特にウィンドウに関するオンライン情報が不足しています。

私が読んだものから素晴らしい音が聞こえるので、clangとLLVMが動作するようにしたいです。任意の助けをいただければ幸いです。

ありがとう。

40
Luther

このページ (サイドバーの「Clang開発」部分に隠されています...)にclangを構築するためのいくつかの指示があります。 MinGWの場合、「Unix系システム」というセクションが必要です。唯一のトリッキーな部分は、C++標準ライブラリのパスを設定する方法を説明するステップ5です。これらはclang/lib/Frontend/InitHeaderSearch.cppのコードに追加する必要があります。私のマシンでは、このように見えました

// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false);

これらがすべて必要かどうかはわかりませんが!

20
Mike Dinsdale

MinGWのバージョン(および移植されたgccのバージョン)によっては、ヘッダーが少し散在する場合があります...

ファイル内clang/lib/Frontend/InitHeaderSearch.cppいくつかのハードコーディングされたパスがあります。問題はそれぞれがバージョン固有であるため、MinGWのバージョンがそこにない場合は、お気軽に追加してください(パッチをcfe-commitに投稿してClangのメインラインに統合するように依頼してください)。

個人的には、マイナーな問題のみでMinGW/msysで実行します(: in ...)、私はCodeBlocksからそれを使用しようとしませんでした(私はコマンドラインに慣れています)。

TakumiはMinGWの統合を監視しており、Francois PichetはVC++/MFCヘッダーとの互換性に関する作業をリードしています(つまり、主な貢献者です) @ rubenvb は現在パッチをプッシュしようとしていますlibc ++をWindows上で動作させる(libc ++はまだWindows上でコンパイルしません)。 3つの分野はほとんど独立しており、異なるスキルと知識が必要です。

6
Matthieu M.

同様の問題がありました。 Mike Dinsdaleの回答で指定されたパスのGCC 4.7の類似物を使用し、「-isystem」フラグ(rubenvbで構築されたmingw64ディストリビューションのClang 3.2)で、clang実行可能ファイルへの今後のすべての呼び出しに指定しましたスクリプト)。これらのディレクトリはsystem包含ディレクトリとして明示的に指定されているため、それらによって生成される潜在的に面倒な警告はすべて自動的に抑制されます。

tl; dr:-isystemフラグは、system組み込みディレクトリを再コンパイルなしで指定しますClangで

5
user

Clangには、ファイルclang/lib/Frontend/InitHeaderSearch.cpp、コメントの近くFIXME: temporary hack: hard-coded paths

このページには、それに関するメモがあります。 http://clang.llvm.org/get_started.html

したがって、他のコンパイラ(MingW)からインクルードパスを取得し、Clangにハードコーディングすると、mightが機能します。 (ClangのWindowsサポートがまだ100%であるかどうかはわかりません)

4
jalf

Windows 10/VS 2017/Clang 4.0. Cコードにstdlib.hがありません。これは私がそれを解決した方法です:

  • x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017を開きます。ここでclangを実行すると、「ヘッダーがありません」エラーが解消されます。
  • それでも動作しない場合、実際のヘッダーやライブラリが欠落しています。これは、Clangがこれらのプラットフォーム固有のものをVSまたはMinGWに残すためです。 \Program Files (x86)\Windows Kits\10\Include\に移動し、そのサブディレクトリ(存在する場合)でstdlib.hおよびcoを検索します。見つからない場合は、Visual Studio(インストーラー)に移動して変更をクリックしてパッケージを追加し、最新のWindows 10 SDKをインストールする必要があります。
2
Engineer

同じ問題が発生したとき、コードブロックをセットアップ用の正しいインクルードディレクトリに設定しました。そして、-Iとclang ++を使用し、これまでのところすべてがうまく機能しています。

0
Chawathe Vipul