Clangd 找不到标准库标头,并且对所有内容都给出奇怪的错误

问题描述 投票:0回答:1

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 设置了配置(在全局和项目范围内),添加了指示包含目录路径、要使用的标准等的“编译器标志”。在
  • .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

的路径,现在一切都按预期工作。

    

c++ vscode-extensions clangd vscodium
1个回答
2
投票
clangd.exe

,语言服务器),而不是使用官方 Clang 安装程序或让 VSC 扩展下载它。

然后在 VSC 设置中指定它的路径:

"clangd.path": "path/to/clangd",

MSYS2 的 Clangd 使用与 MSYS2 编译器相同的默认标志。

如果 MSYS2 的 Clangd 行为不当(早期版本曾经这样做过),只要在

"clangd.fallbackFlags"

或其他地方(可能至少包括

--target=?? --sysroot=??
)为其指定正确的编译器标志,就可以使用官方构建,其中前者是目标三元组,后者可能是
path/to/mingw64
(根据您的需要替换
mingw64
MSYS2环境
)).

© www.soinside.com 2019 - 2024. All rights reserved.