首页 > 解决方案 > 在 Windows 上使用 MinGW 进行 Clang

问题描述

我已经安装了 MinGWgcc和 Clangclang并通过添加到路径中chocolatey,两者都可以在命令行上找到。但是,当我尝试使用clangwith 时gccclang似乎不知道在标准库中哪里可以找到头文件(例如iostream),返回以下错误:

clang++ -v main.cpp -o main.exe -std=c++14 -target x86_64-mingw64
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-unknown-windows-gnu
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
(SKIP)
ignoring nonexistent directory "(nonexistent directories)"
#include "..." search starts here:
#include <...> search starts here:
C:\Program Files\LLVM\lib\clang\9.0.0\include
End of search list.
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.

shell returned 1

我已经将gcc和添加clang到路径以及包含gcc( C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0) 中包含的头文件的目录,所以我不明白为什么clang没有在正确的位置寻找头文件。我该如何解决这个问题?这并不是真正必要的,但是可以clang更改默认目标吗?当前 Windows 10 的默认clang值为msvc,但我宁愿不使用它。

标签: windowsgccclangclang++

解决方案


解决方案:编辑您的路径环境,将 [path to your g++ folder] 移动或添加到“C:\ProgramData\Chocolatey\bin”之前的某个位置。

原因:使用来自 Chocolatey 或其官方网站的预构建二进制文件安装的 LLVM 缺少头文件,因此它必须使用其他编译器的头文件,例如 MSVC 或 mingw64。当你指定你的target为mingw64时,clang会通过g++.exe(可能是gcc.exe)的位置来猜测mingw头文件的路径。Chocolatey 使用软件 shimgen 将可执行文件“映射”(我不知道是否有更合适的词)到“C:\ProgramData\Chocolatey\bin”,该文件位于 [您的 g++ 文件夹的路径]之前。因此,clang 将首先检测该路径下的“g++.exe”并从中推断出错误的路径。

请原谅我糟糕的英语。


推荐阅读