繁体   English   中英

clangd 不识别标准标头

[英]clangd doesn't recognize standard headers

这个问题已经被问过和回答过很多次了,但似乎没有一个答案对我有用。

我一直在尝试在clangd lsp 中设置 clangd。 我用bear生成了compile_commands.json ,但是 clangd 仍然给我错误,告诉我它找不到标准库头文件。 这是一个最小的例子:

主.cpp:

#include <iostream>
using namespace std;

int main(){
  cout << "hello clangd";
  return 0;
}

然后我运行: bear -- g++ main.cpp ,它编译并创建一个包含以下内容的compile_commands.json

[
  {
    "arguments": [
      "/usr/bin/g++",
      "-c",
      "main.cpp"
    ],
    "directory": "/home/xxx/tmp/hello_clangd",
    "file": "/home/xxx/tmp/hello_clangd/main.cpp"
  }
]

我还尝试使用 cmake 标志进行编译以生成compile_commands.json但我遇到了同样的问题。 我可以获取文件,但语言服务器仍然无法正常工作。

我已经能够将 clang 与vim-pio一起使用,所以它似乎没有损坏。 我错过了什么。

编辑:我在 ubuntu 顺便说一句

我在使用 lunarvim 1,2 的 Pop._OS 22.04 LTS 上遇到了类似的问题,而 Clang++/Clangd 似乎在寻找最新的可用库,而不是解析“11”目录(其中包含“libstdc++”)。 它为库解析“12”目录(不包含“libstdc++”)。

ls /usr/lib/gcc/x86_64-linux-gnu/
11  12

我搜索了我需要的版本。

apt search libstdc++

从 apt 存储库安装 gcc 版本 12 的“libstdc++”后问题得到解决。

apt install libstdc++-12-dev

我用这篇文章来解决这个问题

我已经按照此处的说明使用 clang++ 自己找到了解决方案。 对我有用的命令是:

bear -- clang++ -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -L /usr/lib/gcc/x86_64-linux-gnu/11 main.cpp

我仍然有点困惑,所以我愿意接受更好的解决方案和解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM