在Mingw 64bit上使用Clang

Mik*_*e M 12 c++ gcc qmake mingw clang

我想有除了铛GCCMinGW的,64位的Windows 7环境下,无论是使用标准库从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"
Run Code Online (Sandbox Code Playgroud)

编译归结为:

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; };
                         ^
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索引用了_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
Run Code Online (Sandbox Code Playgroud)

小智 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编译器,C++编译器,MSYS Basic系统和Mi​​nGW Developer Toolkit MinGW软件包.

第2步

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

第3步

安装Subversion.我使用了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

Checkout Clang:

cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..
Run Code Online (Sandbox Code Playgroud)

Checkout Compiler-RT:

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..
Run Code Online (Sandbox Code Playgroud)

第4步

C++标头和库.Clang将尝试自动探测MinGW的目录结构,以获得支持的libstdc ++路径集.对于32位i686-w64-mingw32和64位x86_64-w64-mingw32,Clang假设如下:

  • some_directory /斌/ gcc.exe
  • some_directory /斌/ clang.exe
  • some_directory/bin中/铛++.exe文件
  • some_directory/bin中/../包括/ C++/GCC_version
  • some_directory/bin中/../包括/ C++/GCC_version/x86_64的-W64-的mingw32
  • some_directory/bin中/../包括/ C++/GCC_version/i686的-W64-的mingw32
  • some_directory/bin中/../包括/ C++/GCC_version /向后
  • some_directory/bin中/../ x86_64的-W64-的mingw32 /包括
  • some_directory/bin中/../的i686-W64-的mingw32 /包括
  • some_directory/bin中/../包括

这个探测逻辑可以在这里的InitHeaderSearch.cpp中找到(编写本文时的第374行):

  • C:\ MinGW的\ MSYS\1.0\SRC\LLVM \工具\铛\ LIB \前端\ InitHeaderSearch.cpp

确保您的MinGW安装程序使用的gcc版本与支持的版本匹配(例如,我的情况是4.6.2),请查看此处C:\ mingw\lib\gcc\mingw32\4.6.2.

如果您的gcc版本似乎不会自动支持,Clang将可用于解析标准库和标题 - 您需要这样.一些流行的方式来帮助Clang找到这些(如果还没有):

  • 指定--with-gcc-toolchain configure选项(在构建之前)告诉Clang在哪里安装了包含所需libstdc ++的gcc.
  • 创建一个符号链接,例如,如果您有4.7.2并且自动探测逻辑中只有4.7.0,则创建4.7.0的4.7.0符号链接.
  • 在构建Clang之前,将InitHeaderSearch.cpp修改为您的特定环境.

第5步

建立.使用MinGW shell.对皮特的信誉.

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
Run Code Online (Sandbox Code Playgroud)

归功于原创作品: Ben Simmonds发表于2012年10月20日