Плагин Windows Sublime и LSP-Clangd: не удается найти заголовки C ++ - PullRequest
0 голосов
/ 18 февраля 2019

Я недавно решил, что хочу попробовать 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, две ошибки, которые я получаю:

  • 'бит / stdc ++. h 'файл не найден
  • с использованием директивы относится к неявно определенному пространству имен' std '
    • использование необъявленного идентификатора' cin '
    • использование необъявленного идентификатора'cout '
    • использование необъявленного идентификатора' endl '

Три вложенных маркера, которые, я полагаю, будут решены с помощью решения ошибки 'std', поэтому я не думаю, что они являются ошибками?

'bits / stdc ++. H' является включениемЯ использую, когда участвую в соревнованиях по программированию, поэтому я знаю, что он существует, несмотря на то, что он плох на рабочем месте, и я знаю, что using namespace std - это не «хорошая практика», но, по крайней мере, я знаю, что это не ошибка, которая нарушает компиляцию.Такое ощущение, что это проблема Clangd, но я знаю, что IDE с LSP, который я использовал в прошлом, например Visual Studio и CLion, не сообщает об этих двух ошибках.Кто-нибудь еще решал эту проблему раньше?

ОБНОВЛЕНИЕ: я действительно потратил время на сборку небольшого файла cpp с Clang.exe, запустив clang++ otherside.cpp.Я получил ожидаемую ошибку, указав: «Неустранимая ошибка:« бит / файл stdc ++. H »не найден».Похоже, что существует несоответствие между Windows и Linux.

Я понял, что мне нужны заголовки C / C ++ в Windows.Согласно: https://clang.llvm.org/get_started.html, рекомендуется использовать утилиты MSys или GNUWin32.Я надеялся, что смогу использовать заголовки C / C ++ через WSL, разве это возможно?

Feb.22.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?

1 Ответ

0 голосов
/ 27 февраля 2019

Я решил свой начальный вопрос. Для ясности: я выяснил, почему 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»
  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 (хотя я должен признать, что найти решение, использующее заголовки C / C ++ WSL, - это то, что я разочаровался в поиске чего-то «независимого от 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 Build"Инструменты ": https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
  4. Откройте" Инструменты сборки Visual Studio "и установите" Универсальные инструменты сборки Windows Platform "
  5. Перезагрузите компьютер (так что может произойти новая модификация PATH среды Windows).
  6. Установка LSP из управления пакетами
  7. тип LSP: глобально включить Language Server в командную палитру
  8. введите clangd в следующем окне и нажмите Enter, чтобы включить.
  9. Перезапустите Sublime и откройте файл C ++.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...