Модули C++20 с GCC и редактором LSP Clang/Eclipse CDTC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Модули C++20 с GCC и редактором LSP Clang/Eclipse CDT

Сообщение Anonymous »

Мой проект определяет модуль ocr, импортирует std и включает заголовки из нескольких библиотек, например:

Код: Выделить всё

module;

#include 
#include 
#include 

module ocr;
import std;
Он компилируется с помощью GCC 15 с параметром -fmodules -fsearch-include-path bits/std.cc.
Для редактора LSP Eclipse CDT с использованием clangd (LLVM 21) я сначала предварительно скомпилировал оба модуля:

Код: Выделить всё

clang -std=c++23 -stdlib=libc++ -Wno-reserved-identifier -Wno-reserved-module-identifier --precompile -o std.pcm /usr/lib/llvm-21/share/libc++/v1/std.cppm

clang -std=c++23 -stdlib=libc++ --precompile -o ocr.pcm OCR.cppm
В .clangd в проекте Eclipse у меня есть:

Код: Выделить всё

CompileFlags:
Add: [-std=c++23, -Wall, -fmodule-file=std=std.pcm, -fmodule-file=ocr=ocr.pcm]
При этом редактор LSP (или clang при компиляции в командной строке) сообщает мне:

Код: Выделить всё

OCR.cpp:69:32: error: reference to 'string' is ambiguous
69 | void OCR::readImage(const std::string &body,
|                                ^
/usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/stringfwd.h:79:33: note: candidate found by name lookup is 'std::string'
79 |   typedef basic_string    string;
|                                 ^
/usr/lib/llvm-21/share/libc++/v1/std/string.inc:34:14: note: candidate found by name lookup is 'std::string'
34 |   using std::string;
Я полагаю, что именно эти два компонента включают и , которые «втягивают» libstdc++, вызывая двусмысленность с libc++.
Имеет ли вообще смысл то, что я пытаюсь сделать, можно ли разрешить двусмысленность?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... lsp-editor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»