【问题标题】:clangd on linux cannot find default headerslinux上的clangd找不到默认标头
【发布时间】:2019-03-21 20:52:12
【问题描述】:

我已经从官方 PPA 安装了最新的 LLVM 工具链,包括 clang、clang-tools-extra、lldb、lld、libc++ 和 libc++abi。我正在尝试使用clangd with emacs + lsp

除了clangd找不到内存、向量等默认标头外,一切正常。我的代码很好,它通常是使用 clang 编译的。我的 compile_commands.json 也还行。

如何让clangd工作?

编辑:删除了关于从源代码构建 llvm+clang 的提及,因为它已被错误地完成。

【问题讨论】:

  • 您可能应该说明您用于构建 LLVM 的步骤。有可以构建的可选组件,它们对构建树中的位置很敏感。您是否还构建和安装了libc++libc++abi?另见Noloader | build-llvm.sh。它构建了旧版本的 Clang,但向您展示了如何在配置之前将组件放置在树中。
  • 我已经删除了关于从源代码构建 llvm 的提及,因为我还没有安装它。可能是这种情况,但我想从官方 ppa 安装后一切正常。

标签: c++ linux ubuntu emacs clang


【解决方案1】:

我没有在互联网上找到任何信息,所以在这里发布解决方案。 假设 llvm 工具链安装在/usr/lib/llvm-8 中。 答案是:

sudo ln -s /usr/lib/llvm-8/include/c++/v1 /usr/include/c++/v1

就是这样。祝你好运。

【讨论】:

  • 这对我来说听起来不正确。编译器应该知道它的 C++ 头文件在哪里。听起来构建脚本有问题。
  • 我已经安装了所有的 llvm 包,包括 libc++。事情是clang本身,并且由于某种原因clangd在linux上查找libc++头文件的逻辑不同,所以clang工作得很好,clangd没有。在深入研究了 clang 和 clangd 源代码后,我决定尝试将 libc++ 标头位置链接到 clang 在 linux 上使用的位置,它终于奏效了。
  • 顺便说一句 this line 促使我尝试这种解决方法。
猜你喜欢
  • 2022-07-10
  • 1970-01-01
  • 2019-07-11
  • 2015-11-10
  • 2022-07-11
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多