Windows Sublime和LSP-Clangd插件:找不到C ++标头

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

我最近决定尝试使用SublimeText 3,我发现它非常整洁,插件支持很广泛!我最近发现了这个插件:https://github.com/tomv564/LSP,我和Clangd一起使用它。但问题是,我所知道的错误是我已经尝试过编译的。我采取的步骤很简单:

  1. 安装Sublime:https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
  2. 为Windows安装CLang.exe预构建的二进制文件:https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
  3. 重新启动计算机(因此可以对Windows环境路径进行新的修改)。
  4. 从Package Control安装LSP
  5. 键入qazxsw poi进入命令调色板
  6. 键入LSP: Enable Language Server Globally进入后续窗口并点击clangd启用。
  7. 重新启动Sublime并打开C ++文件。

C ++文件本身并不特别,我可以在这里发布以确保零模糊:

enter

当我使用#include <bits/stdc++.h> using namespace std; int main() { int w, s, c, k; cin >> w >> s >> c >> k; bool valid = false; if (k > s) valid = true; else if (k == s) { if (w + c < k) valid = true; else if (w + c == k) valid = true; else if (w == k && c == k) valid = true; else if (w + c <= 2 * k) valid = true; } else if (w + c < k) valid = true; else if (w + c == k && s <= 2 * k) valid = true; cout << (valid ? "YES" : "NO") << endl; return 0; } 通过WSL实际运行它时,此文件构建,但在Sublime.exe中,我得到的两个错误是:

  • 找不到'bits / stdc ++。h'文件
  • using指令是指隐式定义的命名空间'std' 使用未声明的标识符'cin' 使用未声明的标识符'cout' 使用未声明的标识符'endl'

我认为三个嵌套的子弹将通过'std'错误的解决方案解决,所以我真的不认为它们是错误的?

'bits / stdc ++。h'是我在参加编程比赛时使用的一个包含,所以我知道它存在,尽管在工作场所很糟糕,我知道clang++ otherside.cpp不是“好习惯”,但至少我知道它是不是一个破坏编译的错误。这感觉就像是一个Clangd问题,但是我知道我过去使用过LSP的IDE,比如Visual Studio和CLion都没有报告这两个错误。有没有人以前解决过这个问题?

更新:我实际上花了时间通过运行using namespace std与Clang.exe一起构建小cpp文件。我得到了预期的错误指定:“致命错误:'bits / stdc ++。h'文件未找到”但是,在WSL上编译通过clang++ otherside.cpp编译就好了。所以看起来Windows和Linux之间存在差异。

我发现我需要在Windows上使用C / C ++标头。根据:clang++ otherside.cpp,推荐的是MSys实用程序或GNUWin32。我希望通过WSL可以使用C / C ++头文件,这有可能吗?

2月22日更新:我试图安装MinGW C和C ++编译器来获取Clang的标题,但看起来如果我想让Clang找到那些标题,我将不得不从源代码构建Clang并修改一些名为https://clang.llvm.org/get_started.html的东西。同样,我希望有更多的解决方案,我可以使用WSL的C / C ++标头与Clang.exe。

另外,作为我朋友的概念证明,我还在WSL上安装了Sublime,并安装了LSP-Clangd插件,以显示我在Windows上出现的Clang错误都没有出现在WSL Sublime上。虽然肯定错误没有出现在WSL Sublime上,但它提出了一个有趣的观点。也许有一种方法可以在WSL中启动Clangd并将Sublime.exe挂钩到那个?我知道在过去的几年里,WSL已经实现了跨越式发展,其中一件事就是AF_UNIX套接字。我不是最熟悉unix套接字,是否可以使用它来启动或与Clangd交互?

clang sublimetext3 windows-subsystem-for-linux sublime-text-plugin language-server-protocol
1个回答
0
投票

我已经解决了我的初步问题。要清楚:我弄清楚为什么Clangd找不到c ++标题。我没有解决如何使用WSL提供的C / C ++头文件,也没有解决如何使用unix套接字通过WSL与Clangd交互的问题。

我的问题比仅仅缺少initHeaderSearch.cpp更深刻。我一般都缺少所有的C / C ++头文件。有各种方法来获取这些,但我选择的方法是通过“Visual Studio Build Tools”安装MSVC。我在这里下载了“Visual Studio Installer”:stdc++.h

下载后,我安装了程序并执行了以下两个步骤:

  1. 打开“Visual Studio Installer”
  2. 安装“通用Windows平台构建工具” 其中一个选项已经检查安装“Windows 10 SDK(10.0.17763.0)”

之后,LSP插件对我有用。唯一的问题是“bits / stdc ++。h”,因为它是非标准的,因此MSVC没有它。我只是用Googled“GCC stdc ++。h”来获取那个,然后拉出我发现的第一个,特别是这个:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15并将它放在一个名为“bits”的文件夹中,与我的其他C / C ++头文件位于同一个地方(对于我来说:C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ VC \ Tools \ MSVC \ 14.16.27023 \ include)。

关闭的一点点PS:我真的安装了整个工具链,因为我想知道我是否能够拥有一些我认为“Linux独立”的东西。我想要一个轻量级替代Visual Studio,我可以推荐给那些不像Linux那样的同行(虽然我不得不承认找到一个使用WSL的C / C ++标题的解决方案是我放弃了找到一些东西“Linux独立“)。有多种方法可以获得C / C ++标头,最突出的是安装Visual Studio或MinGW。安装Visual Studio会失去替代的目的,而MinGW实际上需要从源代码构建Clang以包含C / C ++头部位置。 MSVC是这里的完美选择,因为安装它很简单。这个解决方案实际上只增加了我在步骤中重现问题的步骤,它完成了包,并为C / C ++提供了一个相对容易设置的开发环境。这些步骤是:

  1. 安装Sublime:https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h
  2. 为Windows安装CLang.exe预构建的二进制文件:https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
  3. 安装“Visual Studio构建工具”:https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
  4. 打开“Visual Studio构建工具”并安装“通用Windows平台构建工具”
  5. 重新启动计算机(因此可以对Windows环境路径进行新的修改)。
  6. 从Package Control安装LSP
  7. type LSP:在全局启用语言服务器到命令选项板
  8. 键入clangd进入后续窗口并按Enter键启用。
  9. 重新启动Sublime并打开C ++文件。
© www.soinside.com 2019 - 2024. All rights reserved.