【问题标题】:Windows Sublime and LSP-Clangd plugin: Cannot find C++ headersWindows Sublime 和 LSP-Clangd 插件:找不到 C++ 标头
【发布时间】:2019-07-11 07:37:51
【问题描述】:

我最近决定尝试 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 环境 PATH 进行新的修改)。
  4. 从包控制安装 LSP
  5. 在命令调色板中输入LSP: Enable Language Server Globally
  6. 在随后的窗口中输入clangd 并点击enter 启用。
  7. 重启 Sublime 并打开一个 C++ 文件。

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

#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 中,我遇到的两个错误是:

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

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

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

更新:我实际上是通过运行clang++ otherside.cpp构建带有 Clang.exe 的小 cpp 文件。我得到了预期的错误,指定:“致命错误:'bits/stdc++.h'文件未找到”但是,通过 WSL 上的 clang++ otherside.cpp 编译它就可以了。因此,Windows 和 Linux 之间似乎存在差异。

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

Feb.22.19 更新:我尝试安装 MinGW C 和 C++ 编译器来获取 Clang 的头文件,但看起来如果我想让 Clang 找到这些头文件,我必须从源代码构建 Clang 并修改名为initHeaderSearch.cpp。同样,我希望有更多的解决方案,我可以将 WSL 的 C/C++ 头文件与 Clang.exe 一起使用。

另外,作为对我朋友的概念证明,我还在 WSL 上安装了 Sublime,并安装了 LSP-Clangd 插件以表明我在 Windows 上遇到的 Clang 错误都没有出现在 WSL Sublime 上。虽然这些错误确实没有出现在 WSL Sublime 上,但它提出了一个有趣的观点。也许有一种方法可以在 WSL 中 start Clangd 并让 Sublime.exe 挂钩到 that?我知道在过去的几年里,WSL 取得了长足的进步,其中产生的一件事就是 AF_UNIX 套接字。我对 unix 套接字不是最熟悉的,是否可以使用它来启动或与 Clangd 交互?

【问题讨论】:

    标签: clang sublimetext3 windows-subsystem-for-linux sublime-text-plugin language-server-protocol


    【解决方案1】:

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

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

    下载后,我安装了程序,按照以下两个步骤进行:

    1. 打开“Visual Studio 安装程序”
    2. 安装“通用 Windows 平台构建工具”
      • 已检查要安装的选项之一是“Windows 10 SDK (10.0.17763.0)”

    在那之后,LSP 插件就为我工作了。唯一的问题是“bits/stdc++.h”,因为它是非标准的,所以 MSVC 没有它是有道理的。我只是用谷歌搜索了那个“GCC stdc++.h”,然后拉出了我找到的第一个,特别是这个: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/precompiled/stdc%2B%2B.h 并将其放在一个名为“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://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. 安装“Visual Studio 构建工具”:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
    4. 打开“Visual Studio 构建工具”并安装“通用 Windows 平台构建工具”
    5. 重新启动计算机(以便可以对 Windows 环境 PATH 进行新的修改)。
    6. 从包控制安装 LSP
    7. 输入 LSP:在命令调色板中全局启用语言服务器
    8. 在随后的窗口中输入clangd,然后按回车键启用。
    9. 重启 Sublime 并打开一个 C++ 文件。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2022-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2022-08-10
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        相关资源
        最近更新 更多