clangd 误报“<quadmath.h>”未找到

问题描述 投票:0回答:1

我有一个 C++ 项目,使用 CMake、GCC 和 Arch Linux。我正在使用 GCC 并且该项目正在正确编译(在 IDE 和命令行中),但我在 Qt Creator 中遇到以下错误:

heat_transfer_explicit_scheme.cpp:1:10: In included file: 'quadmath.h' file not found
float128.hpp:54:10: error occurred here
...
heat_transfer_explicit_scheme.cpp:1:10: In included file: no member named 'value' in 'boost::multiprecision::number_category<backends::float128_backend>'
number.hpp:131:399: error occurred here

但是此标头存在于

/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
中,单击
#include <quadmath.h>
将在 IDE 中打开它。

据我了解,

/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
不是默认的sysroot,clangd不知道这个位置,所以我尝试添加
CMAKE_SYSROOT
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
,就像在这个论坛线程上一样:Qt论坛 - Qt Creator - clang代码模型即使代码编译,也找不到类型。但它并不能让 clangd 访问
<quadmath.h>
位置。

此外,在

CMAKE_SYSROOT
中设置
CMakeLists.txt
指向其位置后,
find_package
无法找到其他项目依赖项(如 boost)。

另外,我尝试将

/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
添加到当前终端会话的 PATH 并从此环境中打开 Qt Creator,但似乎没有效果。

基于 Qt 6.7.2 的 Qt Creator 版本 14.0.1(GCC 14.2.1 20240805,x86_64)。

Clangd 没有使用 clang++ 编译器索引这些文件,因为他有自己的实现并且不需要 gcc 内部标头codechecker。但我在项目中使用 g++,并希望 clangd 处理索引。

c++ cmake qt-creator syntax-highlighting clangd
1个回答
0
投票

这只是一个 gcc 标头,如果我是你,我会尝试使用一些预处理器来禁用 clang 上的

#include <quadmath.h>
并相应地修复代码(并将 PR 发送到上游项目?)

#if defined(__GNUC__)
#include <quadmath.h>
#endif

参考:https://github.com/gcc-mirror/gcc/blob/master/libquadmath/quadmath.h

© www.soinside.com 2019 - 2024. All rights reserved.