【问题标题】:Using Clang on Mingw 64bit在 Mingw 64 位上使用 Clang
【发布时间】:2013-06-30 11:47:59
【问题描述】:

除了 GCC 之外,我还想在 Windows 7 上的 MinGW-64bit 环境中使用 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

【问题讨论】:

  • 查看这个线程如何让 clang 在 Windows 上工作:stackoverflow.com/questions/6525245/… 特别是这篇文章:stackoverflow.com/a/6525707/1392778。顺便说一句,在 32 位环境中编译 clang,因为 clang 尚不支持 64 位窗口上的异常处理,这意味着您需要使用 -fno-exceptions 构建所有内容...
  • 好吧,我试过了,现在我遇到了同样的问题,但没有包括标准库的路径。所以错误仍然是:__int128 is not supported on this target。关键不是,没有找到 gcc 的标准库,问题是,它似乎不适用于 clang(至少 gcc 版本 4.8.1 和 clang 3.3)。
  • 我正在使用与 tdm mingw 4.7.1 捆绑在一起的 clang-3.3,并且构建 bits/random.h 对我来说效果很好。所以你可以考虑改用 4.7.x。
  • rubenvb 的构建在其他时间对我有用 rubenvb SourceForge。最后的构建来自 clang 3.3,下载 GCC 并使用 clang 文件进行更新。

标签: c++ gcc mingw clang qmake


【解决方案1】:

查看此链接: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 软件包。

第二步

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

第三步

安装 Subversion。我选择了 CollabNet 的 Subversion 1.7.7(Windows 64 位)包。

结帐 LLVM:

cd C:\mingw\msys\1.0 mkdir 源代码 光盘源 svn cohttp://llvm.org/svn/llvm-project/llvm/trunkllvm

结帐叮当声:

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

第四步

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.0 到 4.7.2 的符号链接。
  • 在构建 Clang 之前,将 InitHeaderSearch.cpp 修改为您的特定环境。

第 5 步

构建。使用 MinGW 外壳。这要归功于 Pete。

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

原创作品的功劳: Posted by Ben Simmonds Oct 20th, 2012

【讨论】:

  • 感谢您发布您的答案!请注意,您应该在此处、此站点上发布答案的基本部分,否则您的帖子有被删除的风险See the FAQ where it mentions answers that are 'barely more than a link'. 如果您愿意,您仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。
  • @bluefeet 这是一个非常好的建议,但没有被遵循:现在链接已失效,答案是令人沮丧的噪音。
  • @AdN 该链接已更新为 Internet 存档中的版本。
  • @bluefeet 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多