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

Windows Sublime and LSP-Clangd plugin: Cannot find C++ headers

我最近决定尝试 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 pre-built 二进制文件:https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
  3. 重新启动计算机(这样可以对 Windows 环境 PATH 进行新的修改)。
  4. 从包控制安装 LSP
  5. 在命令面板中输入 LSP: Enable Language Server Globally
  6. 在随后的 window 中输入 clangd 并点击 enter 以启用。
  7. 重启 Sublime 并打开一个 C++ 文件。

C++文件本身没什么特别的,我可以post这里确保零歧义:

#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 clang++ otherside.cpp 构建此文件时,但在 Sublime.exe 中,我得到的两个错误是:

我认为三个嵌套的项目符号可以通过 'std' 错误的解决方案来解决,所以我真的不认为它们是错误的?

'bits/stdc++.h'是我在参加编程比赛时使用的一个include,所以我知道它存在,尽管在职场上很糟糕,我知道using namespace std不是"good practice"但至少我知道这不是破坏编译的错误。感觉是Clangd的问题,不过我知道我以前用过的LSP IDE 和 CLion 等都不会报这两个错误。以前有其他人解决过这个问题吗?

更新:我实际上花时间 build 由 运行ning clang++ otherside.cpp 和 Clang.exe 的小 cpp 文件。我得到了预期的错误指定:"fatal error: 'bits/stdc++.h' file not found" 但是,在 WSL 上通过 clang++ otherside.cpp 编译它编译得很好。所以 Windows 和 Linux 之间似乎存在差异。

我发现我在 Windows 上需要 C/C++ headers。根据: https://clang.llvm.org/get_started.html ,推荐使用 MSys 实用程序或 GNUWin32。我希望我可以通过 WSL 使用 C/C++ headers,这有可能吗?

Feb.22.19 更新:我试图安装 MinGW C 和 C++ 编译器以获得 Clang 的 headers,但看起来如果我想让 Clang 找到那些 headers,我会必须从源代码构建 Clang 并修改名为 initHeaderSearch.cpp 的东西。再一次,我希望有更多的解决方案,我可以使用 WSL 的 C/C++ headers 和 Clang.exe.

此外,作为给我朋友的概念证明,我还在 WSL 上安装了 Sublime,并安装了 LSP-Clangd 插件以显示 none 我遇到的 Clang 错误 Windows 出现在 WSL Sublime 上。虽然可以肯定的是,错误没有出现在 WSL Sublime 上,但它提出了一个有趣的观点。也许有一种方法可以在 WSL 中 start Clangd 并让 Sublime.exe 挂钩到 that 中?我知道在过去的几年里,WSL 取得了突飞猛进的发展,其中一个成果是 AF_UNIX 套接字。虽然我不是最熟悉 unix 套接字,是否可以使用它来启动 Clangd 或与 Clangd 交互?

我已经解决了我最初的问题。 明确一点:我弄清楚了为什么 Clangd 找不到 c++ headers。我 没有 解决如何使用 WSL 提供的 C/C++ header 也没有解决如何使用 unix 套接字通过 WSL 与 Clangd 交互。

我的问题比简单地缺少 stdc++.h 更深层次。一般来说,我错过了所有 C/C++ header。有多种方法可以获取这些,但我选择的方法是通过 "Visual Studio Build Tools" 安装 MSVC。我在这里下载 "Visual Studio Installer":https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15

下载后,我安装了程序并按照以下两个步骤操作:

  1. 打开"Visual Studio Installer"
  2. 安装"Universal Windows Platform build tools"
    • 已检查要安装的选项之一是 "Windows 10 SDK (10.0.17763.0)"

之后,LSP 插件就对我有用了。唯一的问题是 "bits/stdc++.h",MSVC 没有它是有道理的,因为它是 non-standard。我简单地用 Google 搜索了 "GCC stdc++.h" 并找到了我找到的第一个,特别是这个: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h 并将其放在一个名为 "bits" 的文件夹中,该文件夹与我的 C/C++ header 的其余部分位于同一位置(对我而言,它位于:C: \Program Files (x86)\Microsoft Visual Studio17\BuildTools\VC\Tools\MSVC.16.27023\include).

一点 PS 最后:我真的安装了整个工具链,因为我想看看我是否可以拥有我认为的东西 "Linux independent." 我想要一个轻量级的东西Visual Studio 的替代方案,我可以推荐给那些不像 Linux-oriented 的同行(尽管我不得不承认找到了一个使用 WSL 的 C/C++ headers 的解决方案我放弃了寻找东西 "Linux independent")。有多种获取 C/C++ headers 的方法,最突出的是安装 Visual Studio 或 MinGW。安装 Visual Studio 违背了拥有替代品的目的,而 MinGW 实际上需要从源代码构建 Clang 以包含 C/C++ header 位置。 MSVC 是这里的完美选择,因为安装它很简单。这个解决方案实际上只是在我的步骤中增加了几个步骤来重现问题,它完成了包并允许相对容易地为 C/C++ 设置开发环境。这些步骤是:

  1. 安装 Sublime:https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
  2. 为 Windows 安装 CLang.exe pre-built 二进制文件:https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
  3. 安装"Visual Studio Build Tools":https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
  4. 打开"Visual Studio Build Tools"并安装"Universal Windows Platform build tools"
  5. 重新启动计算机(这样可以对 Windows 环境 PATH 进行新的修改)。
  6. 从包控制安装 LSP
  7. 在命令面板中键入 LSP:全局启用语言服务器
  8. 在后面的 window 中输入 clangd 并按回车键启用。
  9. 重启 Sublime 并打开一个 C++ 文件。

Windows 和 Linux 版本的 LLVM 不同; Windows 上的 clang 需要一些 lib-s 和 headers,可以从另一个 C-Compiler 获得:我使用 gcc。 在这种情况下,有一个 clang 选项 - 您可以使用它: --target=x86_64-w64-windows-gnu