Clangd-14 не может найти заголовки c++

Как я могу заставить clangd найти библиотеки C++?

Вот простой пример, учитывая этот основной файл cpp

// main.cpp
#include <string>

int main() {

 return 0;   
}

Я создаю базу данных compile_commands.json, используя медведя:

$ bear -- g++ main.cpp

Это дает следующее compile_commands.json:

[
  {
    "arguments": [
      "/usr/bin/g++",
      "-c",
      "main.cpp"
    ],
    "directory": "/tmp/test",
    "file": "/tmp/test/main.cpp"
  }
]

Если я хочу проверить, будет ли clangd-14 работать над этим небольшим проектом, он не сможет найти <string>

$ clangd --check=main.cpp 
I[00:26:23.073] Ubuntu clangd version 14.0.0-1ubuntu1
I[00:26:23.073] Features: linux+grpc
I[00:26:23.073] PID: 32847
I[00:26:23.073] Working directory: /tmp/test
I[00:26:23.073] argv[0]: clangd
I[00:26:23.073] argv[1]: --check=main.cpp
I[00:26:23.073] Entering check mode (no LSP server)
I[00:26:23.073] Testing on source file /tmp/test/main.cpp
I[00:26:23.073] Loading compilation database...
I[00:26:23.073] Loaded compilation database from /tmp/test/compile_commands.json
I[00:26:23.074] Compile command from CDB is: /usr/bin/g++ --driver-mode=g++ -c -resource-dir=/usr/lib/llvm-14/lib/clang/14.0.0 -- /tmp/test/main.cpp
I[00:26:23.074] Parsing command...
I[00:26:23.076] internal (cc1) args are: -cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=/tmp/test -resource-dir /usr/lib/llvm-14/lib/clang/14.0.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++ -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/x86_64-linux-gnu -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/backward -internal-isystem /usr/lib/llvm-14/lib/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/tmp/test -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ /tmp/test/main.cpp
I[00:26:23.076] Building preamble...
I[00:26:23.088] Indexing headers...
E[00:26:23.089] [pp_file_not_found] Line 1: 'string' file not found
I[00:26:23.089] Building AST...
I[00:26:23.096] Indexing AST...
I[00:26:23.096] Testing features at each token (may be slow in large files)
I[00:26:23.097] All checks completed, 1 errors

Как заставить clangd работать с заголовками С++?

$ clangd --version       
Ubuntu clangd version 14.0.0-1ubuntu1
Features: linux+grpc
Platform: x86_64-pc-linux-gnu

Вы случайно не на Ubuntu 22.04? Если это так, это распространенная проблема, см. этот ответ для обходного пути.

HighCommander4 19.01.2023 07:20

вы спасли меня, спасибо, пожалуйста, добавьте ответ вместо комментария, чтобы я мог отметить его как правильный

Mihai 19.01.2023 08:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете Ubuntu 22.04, это обычная проблема.

Самый простой обходной путь — установить пакет libstdc++-12-dev, как описано в этом ответе.

Дополнительное обсуждение, включая другие возможные обходные пути, и обсуждение того, как должно выглядеть правильное исправление на стороне clangd, можно найти в этой проблеме clangd (см., в частности, этот комментарий).

Другие вопросы по теме