c++ clangd无法识别标准标头

n3ipq98p  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(767)

这个问题已经被问过很多次了,但没有一个答案对我有效。
我一直在尝试在nvim lsp中设置clangd,我使用bear生成compile_commands.json,但是clangd仍然给我错误,告诉我它找不到标准库头文件。
main.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,但是我遇到了同样的问题。我可以得到文件,但是语言服务器仍然不能正常工作。
我已经能够使用vim-pio的叮当声,所以它似乎没有坏。我错过了什么。
编辑:顺便说一句,我在使用ubuntu

bis0qfac

bis0qfac1#

我在使用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

我用这个帖子来解决这个问题

hwamh0ep

hwamh0ep2#

我自己找到了一个解决方案,使用clang++和here指令。对我有效的命令是:

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

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

相关问题