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 环境 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 中,我得到的两个错误是:

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

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

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

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

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

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

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

4

2 回答 2

0

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

我的问题比简单地缺少更深一点stdc++.h。一般来说,我缺少所有 C/C++ 头文件。有多种方法可以获得这些,但我选择的方法是通过“Visual Studio Build Tools”安装 MSVC。我在这里下载了“Visual Studio 安装程序”: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++ 文件。
于 2019-02-27T09:27:13.223 回答
0

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

于 2021-05-21T09:24:08.533 回答