Я пытаюсь использовать clangd для LSP в Neovim с файлами CUDA .cu, но он не может распознать стандартные функции библиотеки C++ на стороне хоста. Даже простые функции хоста, использующие std::format, std::chrono или std::cout, выдают такие ошибки, как:
No member named 'format' in namespace 'std'
Invalid operands to binary expression ('ostream' (aka 'int') and 'const char[18]')
static assertion failed: duration must be a specialization of std::chrono::duration
Базовый пример
file.cu:
#include
#include
#include
int main() {
std::cout &1 | head -n 5
# Output shows /usr/include/c++/15.2.1/format is found
[*]Проверил, что compile_commands.json существует.
[*]Использовал --query-driver в настройке lspconfig:
cmd = { "clangd", "--query-driver=/usr/sbin/g++,/opt/cuda/bin/nvcc" }
[/list]
Похоже, что ничего из вышеперечисленного не решило проблему.
Среда
- ОС: Arch Linux
- Версия clangd: 21.1.0
- Версия GCC: 15.2.1
- Набор инструментов CUDA: 13.0.88
- Архитектура графического процессора: sm_120 (NVIDIA Blackwell)
- Редактор: Neovim с nvim-lspconfig
Есть ли способ настроить clangd для правильного анализа кода C++ на стороне хоста в файлах .cu?
Дополнительная информация
- Мой проект cmake уже настроен для использования C++20, поэтому добавление -std=c++20 не помогает, потому что оно не имеет никакого эффекта.
- Добавление этого в файл конфигурации тоже не помогает
- --gcc-toolchain=/usr
- Я полагаю, что это сообщение от clangd является основной причиной того, что он выделяет std с некоторыми странными ошибками
Подробнее здесь: https://stackoverflow.com/questions/798 ... lable-stdf
Мобильная версия