Плагин Windows Sublime и LSP-Clangd: не удается найти заголовки C++

Недавно я решил, что хочу попробовать SublimeText 3, и я нахожу его очень аккуратным, поддержка плагинов огромна! Я недавно нашел этот плагин: https://github.com/tomv564/LSP и я использую его с Clangd. Проблема в том, что ошибки, которые я получаю, я знаю, компилируются, как я пытался. Шаги, которые я предпринял, были просты:

  1. Установите Sublime: https://download.sublimetext.com/Sublime%20Text%20Build%203176%20x64%20Setup.exe
  2. Установите предварительно собранный двоичный файл CLang.exe для Windows: https://releases.llvm.org/7.0.1/LLVM-7.0.1-win64.exe
  3. Перезагрузите компьютер (чтобы можно было внести новую модификацию в PATH среды Windows).
  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;
}

Этот файл создается, когда я запускаю его с 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

После загрузки я установил программу и выполнил следующие два шага:

  1. Откройте "Visual Studio Installer"
  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 и поместите его в папку с именем "бит", которая находилась в том же месте, что и остальные мои заголовки 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. Установите предварительно собранный двоичный файл CLang.exe для Windows: 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. Перезагрузите компьютер (чтобы можно было внести новую модификацию в PATH среды Windows).
  6. Установить LSP из пакета управления
  7. введите LSP: включить глобальный языковой сервер в командную палитру
  8. введите clangd в следующем окне и нажмите Enter, чтобы включить.
  9. Перезапустите Sublime и откройте файл C++.

Версии LLVM для Windows и Linux различаются; clang в Windows потребуются некоторые библиотеки и заголовки, их можно получить из другого C-компилятора: я использую gcc. В этом сценарии есть опция clang - вы можете использовать это:--target=x86_64-w64-windows-gnu