Clangd vscode 的扩展不断为我提供 #include 和标准类型的奇怪波浪线。
我的设置:Win11。新鲜内质。我已经使用 MYSYS 安装了 GCC/G++ 和 CLANG(遵循 this 指南),我编辑了 PATH 以包含相关目录,我有 VSCode 的分支 VSCodium,并且我已经安装了 Clangd LS 和 VSCodium 的 Clangd 扩展。
我的问题:对于最常见的事情,Clangd 总是给我一些奇怪的不正确的波浪形错误,例如尝试将
std::string
或 c 字符串(const * char[],const char[])传递给 std::cout
。例如
class someClass
{
...
public:
void someMethod()
{
if (this->someFuncThatReturnsBool())
{
std::cout << "A simple \\n-terminated string literal \n";
//^^^^^^
// "Invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'const char *')"
}
return;
};
};
它还不断给我一些关于头文件的包含路径的包含错误,这些错误肯定是它们应该是的。例如尝试#include <iostream>
时出错,在某些情况下它指出我应该用“”替换<>,在其他情况下它只是说它找不到相关的头文件。我知道这是假错误,因为我的程序同时使用 g++ 和 clang 进行编译
(不成功)尝试解决这个问题
:
我已卸载并重新安装所有相关程序。.clangd
--query-driver
标志,如 Clangd 的常见问题解答中所示
找到答案
@HolyBlackCat 表示问题可能出在由 VSC 扩展安装的 Clangd LS 中。事实上,我删除了二进制文件,使用 MYSYS 安装了 Clangd LS(作为 clang-extra-tools
包的一部分)
$ pacman -S mingw-w64-ucrt-x86_64-clang-extra-tools
然后在 VSC 扩展配置 GUI 中指定
clangd.exe
的路径,现在一切都按预期工作。
clangd.exe
,语言服务器),而不是使用官方 Clang 安装程序或让 VSC 扩展下载它。
然后在 VSC 设置中指定它的路径:"clangd.path": "path/to/clangd",
。
MSYS2 的 Clangd 使用与 MSYS2 编译器相同的默认标志。如果 MSYS2 的 Clangd 行为不当(早期版本曾经这样做过),只要在
"clangd.fallbackFlags"
或其他地方(可能至少包括
--target=?? --sysroot=??
)为其指定正确的编译器标志,就可以使用官方构建,其中前者是目标三元组,后者可能是path/to/mingw64
(根据您的需要替换mingw64
) MSYS2环境)).