【发布时间】:2019-07-11 07:37:51
【问题描述】:
我最近决定尝试 SublimeText 3,我发现它超级简洁,插件支持广泛!我最近发现了这个插件:https://github.com/tomv564/LSP,我将它与 Clangd 一起使用。但问题是我所知道的错误在我尝试过时会编译。我采取的步骤很简单:
- 安装 Sublime:https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
- 为 Windows 安装 CLang.exe 预构建二进制文件:https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
- 重新启动计算机(以便可以对 Windows 环境 PATH 进行新的修改)。
- 从包控制安装 LSP
- 在命令调色板中输入
LSP: Enable Language Server Globally - 在随后的窗口中输入
clangd并点击enter启用。 - 重启 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