问题标签 [clangd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1803 浏览

emacs - emacs lsp c-mode:路径上不存在命令“clangd”

我想使用 Emacs LSP c 模式,但我收到错误“路径上不存在命令“clangd””。

我做了以下步骤来安装:

  1. 从 melpa-stable 获取 lsp 包
  2. 从 melpa-stable 获取 company-lsp
  3. 使用自制软件获取 ccls
  4. 将以下内容添加到我的 .emacs 文件中:

    (require 'lsp-mode) (add-hook 'rust-mode-hook #'lsp) (add-hook 'c-mode-hook #'lsp) (require 'company-lsp) (push 'company-lsp company-后端)

我已经使用自制软件安装了 llvm(应该包括 clang)并将其路径添加为环境变量。

有人知道我为什么会收到此错误吗?

0 投票
1 回答
254 浏览

c++ - 如何更改clang预编译头文件的路径

默认情况下,clangd 似乎在系统临时路径中创建 pch 文件,即 /tmp/*.pch。如果我想将其更改为其他位置怎么办?我没有看到 clangd 有任何命令行选项。有任何想法吗?

clangd -pch-storage=disk

0 投票
1 回答
893 浏览

c++ - 将 clangd stderr 重定向到文件而不是控制台

clangd 将日志消息写入标准错误。在 Linux 中,我需要将 stderr 重定向到日志文件以供将来使用,而不是控制台

我使用的命令是:

它可以启动并重定向到文件,但几秒钟后,clangd 停止并在 clangd.log 文件中出现此错误

我错过了什么?为什么传输错误?对于clangd进程,stderr是控制台还是文件应该不是问题?

我只想将 stderr 重定向到文件而不是控制台。我不想在控制台中显示很多日志,这对于不关心的用户来说很烦人,也不利于开发者日后查看日志。

提前致谢

0 投票
0 回答
387 浏览

c++ - (C++) docker 容器中的语言服务器

我不确定标题是否适合我的问题,但我想不出更好的。

由于我正在运行 Arch Linux 但开发必须在 Debian 和 Ubuntu 上运行的软件(在 C++ 中),我目前正在进行以下设置。我有带有 YouCompleteMe 的 neovim(因为我真的很喜欢它)这个设置来在 Docker(运行 Debian)中运行 ycm-server。

现在我想将coc.nvmimclangdccls一起尝试,因为它似乎提供了比YouCompleteMe更好的用户体验。我现在想知道是否可以在服务器上运行clangdccls并让coc.nvmim 毫无问题地连接到它。不幸的是,我在 Google 上找不到任何东西,因此我在询问 StackOverflow 社区。

0 投票
1 回答
628 浏览

visual-studio-code - 是否可以在 VS Code clangd 扩展中指定 libstdc++ 的路径?

我使用 VS Code 作为我的 C++ 开发的主要代码编辑器。我正在使用 Microsoft 的远程 SSH 扩展从家里访问我的办公室工作站。对于 C++ 自动完成和 linting,我使用 LLVM 的 clangd 扩展。公司政策阻止用户对工作站进行 sudo 访问,并且库通常不是最新版本。

当我尝试启动 clangd 时,我收到以下错误消息:

这显然意味着 libstdc++ 的版本对于我正在使用的 clangd 版本来说太旧了。通过将最新 gcc 库(我们的编译器工具链的一部分)的位置添加到 LD_LIBRARY_PATH,然后启动 VS Code,这很容易解决。

但是,现在我正在远程工作,我不能这样做,因为 VS Code 安装在我的笔记本电脑上,并且我正在使用 SSH 扩展来访问我办公室工作站上的代码。查看 clangd 的手册页,我看不到指定要使用的 libstdc++ 路径的方法。除了在启动/登录时将库添加到 LD_LIBRARY_PATH 之外,还有其他方法可以绕过此问题吗?

0 投票
0 回答
807 浏览

c++ - 使用 vim + CMake 设置 LSP (vim-lsc) 的清晰方法?

我正在尝试使用 vim + cmake 设置 LSP。我使用 vim-lsc 插件作为客户端,使用 clangd 作为服务器。

文件夹结构:

  • 测试/
  • 测试.cpp
  • 测试.h
  • CMakeLists.txt

测试.h:

测试.cpp:

CMakeLists.txt:

~/.vimrc:

我用

这编译得很好,没有错误和警告。

但是,test.cpp在 vim 中编辑时,vim-lsc 显示错误,未检测到用户定义的头文件和其中定义的类型。例如,在上面的项目中,显示了以下两个错误:

如何设置它以便正确识别项目中的标题?

编辑:问题有所改变。我在顶级目录中添加了一个 compile_commands.json 文件,但无济于事。我怀疑它与 Windows 上 Git Bash 中路径的表示方式有关。

compile_commands.json 包含如下路径:

如果该类是在同一个文件中定义的,则 lsp 协议似乎正在工作。clang 不能在这样的路径上工作吗?有人可以对此有所了解吗?

0 投票
2 回答
1938 浏览

c++ - Clangd - 如何在没有`compile_commands.json`时设置要使用的默认标志?

这可能是不可能的,但我还是想问。我使用 Clangd 作为 VSCode 的自动完成引擎。它工作得很好,但有一个问题。

Clang 的官方 Windows 二进制文件依赖于 MSVC 标准库头文件。如果未安装 MSVC,Clang 和 Clangd 会抱怨缺少标头。

有一个标志使 Clang 使用 MinGW 的 libstdc++ ( --target=x86_64-w64-windows-gnu),我必须将其包含在compile_commands.json.

此解决方案有效,但即使没有compile_commands.json.

有没有办法让 Clangd 假设--target=x86_64-w64-windows-gnu没有compile_commands.json

0 投票
2 回答
10356 浏览

c++ - 如何在 coc-settings.json 文件中添加语言服务器的包含路径?

我正在使用 neovim 插件"coc-nvim"作为 C/C++ 的 IntelliSense 工具。据我所知,这个插件实际上是 ccls、clangd 和 cquery 等语言服务器的客户端。我在我的系统上安装了所有这些语言服务器,并将它们配置为与 coc-nvim 一起使用。所以我可以在我的 c/c++ 文件中获得自动完成和通用头文件列表(例如 stdio 和 ...)。但是由于我在 ros 平台上工作,所以我想将 ros(/opt/ros/kinetic/include/**) 的标头添加到我的语言服务器的默认包含路径中。如果没有这个选项,我必须在每个项目的开头添加一个虚拟 ros 节点并进行编译catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=YES以生成 compile_commands.json 文件以访问 ros 头文件。

coc.nvim 的设置在 init.vim 文件旁边,在一个名为“coc-settings.json”的文件中,我的 coc 设置文件的内容如下:

所以我的主要问题是如何将 ros 包含路径添加到这些设置中。我检查了coc.nvim 的 wiki 页面,但找不到用户包含路径的任何选项。另外,我检查了 clangd 的选项并尝试将 , 添加 "args":["-I/opt/ros/kinetic/include/"]到相应的块中,但它不起作用。另外,我添加了.cquery文件,但对建议的标题列表仍然没有影响。

对不起,长篇大论,感谢您的时间。

编辑:最好使用 clangd LSP 而不是 ccls。因为它更快并且有更好的文档。谢谢!

编辑(2020 年 4 月 12 日):我发现的最佳解决方案是使用 cclsextraArgs提供的 ccls 语言服务器。因此,如果您将"clang"字段添加到 ccls 配置中,我们可以在自动完成中使用 ros 标头。

但正如我提到的,如果可能的话,我想使用clangd。我到处检查,但没有答案。谁能帮我?(请!)。

0 投票
2 回答
8207 浏览

c++ - clangd 中是否有“includePath”选项?

我曾经使用 VSCode C/C++扩展。这个扩展中有一个特性(在一个 json 文件中),称为“includePath”,我可以为我的头文件设置路径,所以在不执行 CMake 或 make 的情况下,我会从这些文件中获得我的头文件和代码完成的建议.

现在我已经切换到 neovim 和 clangd 作为代码完成的语言服务器。我搜索了很多以在 clangd 选项中找到相应的功能,但除了这个链接之外我找不到任何东西。

由于clangd是一个强大的语言服务器,我想知道它是否没有这样的功能。所以我想知道clangd中真的有这样的功能吗?如果是,我该如何使用它?

注意:我使用了一个名为"coc-clangd"的语言客户端。我不知道这是否重要。

0 投票
1 回答
2248 浏览

clion - Clion clangd,如何限制内存使用

clangd 使用大量内存(在我的系统上高达 2.5Gig)。在我的 8GIG 系统上,我经常遇到 OOM 情况。

目前我发现的唯一解决方案是在使用大量内存后将其杀死。

clangd 有一些命令行选项,看起来它们可能会减少内存使用量。但我还没有找到如何在 CLion 中配置它们的方法。

CLion 不喜欢通过 ulimit 限制其内存,但也许可以只为 clangd 进程限制内存?