Using Clang on Mingw 64bit
Using Clang on Mingw 64bit
我希望在Windows 7上的MinGW-64bit环境中,除了GCC之外,还有clang,两者都使用GCC的标准库。我使用的是来自http://sourceforge.net/projects/mingwbuilds/.
我在这个环境中构建了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
检查此链接:https://web.archive.org/web/20140301212210/http://www.bencode.net/blog/2012/10/20/clangonwindows/
这是一个关于在Windows8和MinGW上运行功能Clang++构建的安装步骤的教程。Windows 8和Windows 7有很多共同点,本教程可以用来完成您的任务。
==============================================
步骤1
安装MinGW。使用mingw-get-inst-20120426.exe与预打包的存储库目录一起使用,该目录捆绑在GCC 4.6.1中,而不是在编写Clang时不无缝支持的4.7.x。您将需要C编译器、C++编译器、MSYS基本系统和MinGW开发工具包MinGW软件包。
步骤2
Python2.x。将Python解释器和库安装到c:\MinGW\bin中。
步骤3
安装Subversion。我使用了CollabNet的子版本1.7.7(Windows 64位)软件包。
结账LLVM:
cd C:\mingw\msys\1.0mkdir srccd srcsvn-cohttp://llvm.org/svn/llvm-project/llvm/trunkllvm
结账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将尝试自动探测MinGW的目录结构,以查找一组受支持的libstdc++路径。对于32位i686-w64-mingw32和64位x86_64-w64-mingw3,Clang假设如下:
- some_directory/bin/gcc.exe
- some_directory/bin/clang.exe
- some_directory/bin/clang++.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\tools\clang\lib\Frontend\InitHeaderSearch.cpp
通过查看此处C:\MinGW\lib\gcc\mingw32\4.6.2,确保您的MinGW安装程序使用的gcc版本与支持的版本匹配(例如,我的情况是4.6.2)。
如果您的gcc版本似乎不受自动支持,Clang将可用于解析标准库和头文件——您需要这样做。一些流行的方法来帮助Clang找到这些(如果还没有的话):
- 指定--with-gcc工具链配置选项(在构建之前),告诉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日
与其手动完成所有操作,不如使用llvm-mingw项目:
https://github.com/mstorsjo/llvm-mingw
哪个(在撰写时)已经准备好使用二进制版本:
https://github.com/mstorsjo/llvm-mingw/releases
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何将C++中的库和头与MinGW一起使用
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 无法在windows上使用mingw将sqlite3与c连接
- MinGw 无法从 cmake 编译测试文件
- MSYS2 MinGW程序包中缺少grpc_cpp_plugin协议
- Mingw-64 在构建和安装后不会编译 openCV 代码
- 安装MinGW后C++编译器不起作用?
- 当我尝试通过 mingw 使用 CMake 和 SFML 库编译项目时出错
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- 使用 MinGW 在 Windows 上安装 GMP 时出错
- VSCode - C++ - MinGW 编译器的问题
- C++:如何在Windows 10上使用编译器MinGW 9.2.0安装OpenCV
- MINGW - 正确运行函数所需的 cdecl
- 尝试在Windows上执行C++时出错(通过MinGW编译)
- 分段 Linux Ubuntu 中的 g++ 错误,但在 Windows 中的 g++/MingW 中,在 C++ 中打
- SFML 库 - 在 MinGW 构建期间未找到错误
- c++ visual studio 64bit | save registers value
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- Using Clang on Mingw 64bit