13

我想在 Windows 7 上的MinGW-64 位环境中除了GCC之外还有 clang ,两者都使用来自 gcc 的标准库。我正在使用来自http://sourceforge.net/projects/mingwbuilds/的 gcc_x64_4.8.1_win32_seh_rev1 和 Qt 。

我在这个环境中构建了 clang 3.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
4

1 回答 1

8

检查此链接:https ://web.archive.org/web/20140301212210/http://www.bencode.net/blog/2012/10/20/clangonwindows/

这是一个关于在 Windows 8 和 MinGW 上运行功能 Clang++ 构建的安装步骤教程。Windows 8 和 Windows 7 有很多共同点,本教程可用于完成您的任务。

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

步骤1

安装 MinGW。使用 mingw-get-inst-20120426.exe 与预打包的存储库目录一起使用,该目录捆绑在 GCC 4.6.1 中,而不是 4.7.x,在撰写本文时 Clang 不支持无缝。您将需要 C Compiler、C++ Compiler、MSYS Basic System 和 MinGW Developer Toolkit MinGW 软件包。

第2步

Python 2.x。将 Python 解释器和库安装到 c:\MinGW\bin。

第 3 步

安装颠覆。我使用了 CollabNet 的 Subversion 1.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

结帐铿锵声:

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 将尝试自动探测 MinGW 的目录结构以获取支持的 libstdc++ 路径集。对于 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 配置选项(在构建之前)以告诉 Clang 包含所需 libstdc++ 的 gcc 安装在哪里。
  • 创建一个符号链接,例如,如果您有 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 日发表

于 2014-08-02T07:26:23.447 回答