Плагин Windows Sublime и LSP-Clangd: не удается найти заголовки C++
Недавно я решил, что хочу попробовать SublimeText 3, и я нахожу его очень аккуратным, поддержка плагинов огромна! Я недавно нашел этот плагин: https://github.com/tomv564/LSP и я использую его с Clangd. Проблема в том, что ошибки, которые я получаю, я знаю, компилируются, как я пытался. Шаги, которые я предпринял, были просты:
- Установите Sublime: https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
- Установите предварительно собранный двоичный файл CLang.exe для Windows: https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
- Перезагрузите компьютер (чтобы можно было внести новую модификацию в PATH среды Windows).
- Установить 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;
}
Этот файл создается, когда я запускаю его с clang++ otherside.cpp
через WSL, но в Sublime.exe, я получаю две ошибки:
- Файл "bits/stdC++.h" не найден
- директива using ссылается на неявно определенное пространство имен 'std'
- использование необъявленного идентификатора 'cin'
- использование необъявленного идентификатора 'cout'
- использование необъявленного идентификатора 'endl'
Я полагаю, что три вложенных маркера будут решены с помощью решения ошибки 'std', поэтому я не думаю, что это ошибки?
'bits/stdC++.h' является включением, которое я использую при участии в соревнованиях по программированию, поэтому я знаю, что оно существует, несмотря на то, что оно плохо на рабочем месте, и я знаю, что using namespace std
это не "хорошая практика", но, по крайней мере, я знаю, что это не ошибка, которая нарушает компиляцию. Такое ощущение, что это проблема Clangd, но я знаю, что IDE с LSP, который я использовал в прошлом, например, Visual Studio и CLion, не сообщает об этих двух ошибках. Кто-нибудь еще решил эту проблему раньше?
ОБНОВЛЕНИЕ: я фактически нашел время, чтобы собрать небольшой файл cpp с Clang.exe, запустив clang++ otherside.cpp
, Я получил ожидаемую ошибку, указав: "Неустранимая ошибка: 'bits/stdC++. H' файл не найден". Однако, компилируя его с помощью clang++ otherside.cpp
на WSL компилируется просто отлично. Похоже, что существует несоответствие между Windows и Linux.
Я понял, что мне нужны заголовки C/C++ в Windows. Согласно: https://clang.llvm.org/get_started.html, рекомендуется использовать утилиты MSys или GNUWin32. Я надеялся, что смогу использовать заголовки C/C++ через WSL, возможно ли это?
22.02.19 ОБНОВЛЕНИЕ: Я попытался установить компиляторы MinGW C и C++, чтобы получить заголовки для Clang, но похоже, что если я хочу, чтобы Clang нашел эти заголовки, мне нужно будет собрать Clang из исходного кода и изменить что-то под названием initHeaderSearch.cpp
, Опять же, я надеюсь на большее решение, где я мог бы использовать заголовки WSL C/C++ с Clang.exe.
Кроме того, в качестве подтверждения концепции моему другу, я также установил Sublime на WSL и установил плагин LSP-Clangd, чтобы показать, что ни одна из ошибок Clang, которые я получаю в Windows, не появлялась в WSL Sublime. Хотя ошибки на WSL Sublime не появлялись, все же возник интересный момент. Может быть, есть способ запустить Clangd в WSL и использовать вместо этого Sublime.exe? Я знаю, что за последние несколько лет WSL сделал все возможное, и одной из вещей, которые из этого вышли, были сокеты AF_UNIX. Я не очень знаком с сокетами Unix, возможно ли использовать это для запуска или взаимодействия с Clangd?
2 ответа
Я решил свой начальный вопрос. Чтобы было ясно: я понял, почему Clangd не может найти заголовки C++. Я не решил, как использовать заголовки C/C++, предоставляемые WSL, и не решил, как взаимодействовать с Clangd через WSL с помощью сокетов Unix.
Моя проблема была немного глубже, чем просто отсутствует stdc++.h
, Я пропустил все заголовки C/C++ в целом. Существуют различные способы их получения, но я выбрал метод установки MSVC через "Инструменты сборки Visual Studio". Я загрузил "Установщик Visual Studio" здесь: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
После загрузки я установил программу и выполнил следующие два шага:
- Откройте "Visual Studio Installer"
- Установите "Универсальные инструменты сборки платформы 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 и поместите его в папку с именем "бит", которая находилась в том же месте, что и остальные мои заголовки 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++. Эти шаги:
- Установите Sublime: https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
- Установите предварительно собранный двоичный файл CLang.exe для Windows: https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
- Установите "Инструменты сборки Visual Studio": https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
- Откройте "Инструменты сборки Visual Studio" и установите "Инструменты сборки универсальной платформы Windows"
- Перезагрузите компьютер (чтобы можно было внести новую модификацию в PATH среды Windows).
- Установить LSP из пакета управления
- введите LSP: включить глобальный языковой сервер в командную палитру
- введите clangd в следующем окне и нажмите Enter, чтобы включить.
- Перезапустите Sublime и откройте файл C++.
Версии LLVM для Windows и Linux различаются; clang в Windows потребуются некоторые библиотеки и заголовки, их можно получить из другого C-компилятора: я использую gcc. В этом сценарии есть опция clang - вы можете использовать это:--target=x86_64-w64-windows-gnu