web-dev-qa-db-ja.com

Mingw64ビットでClangを使用する

MinGW-64bit環境で[〜#〜] gcc [〜#〜]に加えてclangを使用したいWindows 7、どちらもgccの標準ライブラリを使用しています。 http://sourceforge.net/projects/mingwbuilds/ のgcc_x64_4.8.1_win32_seh_rev1とQtを使用しています。

私はこの環境でフラグなしでclang3.3をビルドしました(HAVE_EHTABLE_SUPPORTコンパイルの問題を回避するだけです)。

私はqmakeビルドプロセスを使用しており、プロジェクトファイルにはclang用に次の行が追加されています(リリースモードのみ)。

QMAKE_CC = clang
QMAKE_CXX = clang++
QMAKE_CXXFLAGS_RELEASE += -Wno-ignored-attributes
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32"
QMAKE_CXXFLAGS_RELEASE += -I"C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/x86_64-w64-mingw32/include"

コンパイルは次のようになります。

C:/tc/gcc_x64_4.8.1_win32_seh_rev1/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++\bits/random.h:106:26: error:
      __int128 is not supported on this target
      { typedef unsigned __int128 type; };
                         ^

インターネットを検索すると_mingw.hが参照されましたが、何が問題なのかわかりません。

#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
#define __SIZEOF_INT128__ 16
#endif
12
Mike M

このリンクを確認してください: https://web.archive.org/web/20140301212210/http://www.bencode.net/blog/2012/10/20/clangonwindows/

これは、Windows8およびMinGWで機能するClang ++ビルドを実行するためのインストール手順に関するチュートリアルです。 Windows8とWindows7は多くの共通点があり、このチュートリアルを使用してタスクを実行できます。

==================================================

ステップ1

MinGWをインストールします。 mingw-get-inst-20120426.exeを使用すると、事前にパッケージ化されたリポジトリカタログを使用できます。これは、執筆時点でClangがシームレスにサポートしていない4.7.xとは対照的に、GCC4.6.1にバンドルされています。 Cコンパイラ、C++コンパイラ、MSYS Basic System、およびMinGW Developer ToolkitMinGWパッケージが必要になります。

ステップ2

Python2.x。 Pythonインタプリタとライブラリをc:\ MinGW\binにインストールします。

ステップ3

Subversionをインストールします。 CollabNetのSubversion1.7.7(Windows 64ビット)パッケージを使用しました。

チェックアウトLLVM:

cd C:\ mingw\msys\1.0 mkdir src cd src svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

チェックアウトClang:

cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..

チェックアウトコンパイラ-RT:

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..

ステップ4

C++ヘッダーとライブラリ。 Clangは、サポートされているlibstdc ++パスのセットについてMinGWのディレクトリ構造を自動的にプローブしようとします。 32ビットのi686-w64-mingw32および64ビットのx86_64-w64-mingw32の場合、Clangは次のように想定します。

  • some_directory/bin/gcc.exe
  • some_directory/bin/clang.exe
  • some_directory/bin/clang ++。exe
  • some_directory/bin /../ include/c ++/GCC_version
  • some_directory/bin /../ include/c ++/GCC_version/x86_64-w64-mingw32
  • some_directory/bin /../ include/c ++/GCC_version/i686-w64-mingw32
  • some_directory/bin /../ include/c ++/GCC_version/backward
  • some_directory/bin /../ x86_64-w64-mingw32/include
  • some_directory/bin /../ i686-w64-mingw32/include
  • some_directory/bin /../ include

このプロービングロジックは、ここにあるInitHeaderSearch.cppにあります(これを書いている時点では374行目)。

  • C:\ mingw\msys\1.0\src\llvm\tools\clang\lib\Frontend\InitHeaderSearch.cpp

ここC:\ mingw\lib\gcc\mingw32\4.6.2を見て、MinGWインストーラーが使用したgccのバージョンがサポートされているバージョンと一致していることを確認します(たとえば、4.6.2が私の場合)。

ご使用のバージョンのgccが自動的にサポートされていないように思われる場合は、Clangを使用して標準ライブラリとヘッダーを解決できます。これが必要です。 Clangがこれらを見つけるのを助けるいくつかの一般的な方法(まだ見つけていない場合):

  • --with-gcc-toolchain configureオプション(ビルド前)を指定して、目的のlibstdc ++を含むgccがインストールされている場所をClangに通知します。
  • シンボリックリンクを作成します。例: 4.7.2があり、自動プローブロジックに4.7.0までしか含まれていない場合は、4.7.2への4.7.0シンボリックリンクを作成します。
  • Clangをビルドする前に、InitHeaderSearch.cppを特定の環境に変更します。

ステップ5

ビルドします。 MinGWシェルの使用。このためのピートへのクレジット。

cd /src
mkdir build
cd build
export CC=gcc
export CXX=g++
../llvm/configure --disable-docs --enable-optimized --enable-targets=x86,x86_64 --prefix=/mingw
make
make install

オリジナル作品のクレジット: 投稿者Ben Simmonds 2012年10月20日

8
Samuel