windows - 在 Windows 上使用 MinGW 进行 Clang
问题描述
我已经安装了 MinGWgcc
和 Clangclang
并通过添加到路径中chocolatey
,两者都可以在命令行上找到。但是,当我尝试使用clang
with 时gcc
,clang
似乎不知道在标准库中哪里可以找到头文件(例如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
,但我宁愿不使用它。
解决方案
解决方案:编辑您的路径环境,将 [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”并从中推断出错误的路径。
请原谅我糟糕的英语。
推荐阅读
- powershell - 从 .net 核心配置 powershell 核心以配置一个驱动器
- javascript - 使用 $.get() javascript 将值传递给我的控制器到我的控制器方法
- c# - 使用可观察流上的开关时正确订阅当前可观察
- c# - c#如何在System.Graphics中使用winforms全屏?
- maven - 使用 swagger-maven 插件在 Swagger.yaml 中附加自定义标签
- networking - https://www.whatismyip.com/ 怎么能看到我的局域网 IP 地址?
- bash - 以编程方式将函数添加到用户的 bash 配置文件
- java - How to merge List of Maps of Maps into a Map of Maps?
- reactjs - Invalid prop of type `string` in react
- cytoscape.js - Cytoscape.js 生命周期(?)在遍历 edge.data() 进行编辑时出现问题