qt moc 错误:usr/include/c++/10/bits/fs_fwd.:39:“std”处解析错误

Ale*_*uya 7 qt moc

我的配置是:

ubuntu 21.04
gcc 11
qt 5.15.2
Run Code Online (Sandbox Code Playgroud)

和这样的错误消息:

AutoMoc subprocess error
------------------------
The moc process failed to compile
  "SRC:/src/Layers/ViewLayer/Process/NearFieldProcessUtil.h"
into
  "SRC:/build/MTESS_autogen/MLM4FWGUYC/moc_NearFieldProcessUtil.cpp"

Command
-------
/usr/lib/qt5/bin/moc -DJSON_DIAGNOSTICS=0 -DJSON_USE_IMPLICIT_CONVERSIONS=1 "-DvtkRenderingCore_AUTOINIT_INCLUDE=\"/home/alex/workspace/mtess/MTESS/build/CMakeFiles/vtkModuleAutoInit_be7301261a49b13d6a9b1d9e110eacd8.h\"" -I/home/alex/workspace/mtess/MTESS/src -I/home/alex/workspace/mtess/MTESS/vendor/ProjectStructure -I/home/alex/workspace/mtess/MTESS/vendor/imgui -I/home/alex/workspace/mtess/MTESS/vendor/imgui/imgui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/local/qwt-6.2.0/include -I/usr/local/include/opencascade -I/lib -I/usr/local/include -I/usr/include/vtk-9.0 -I/usr/include/c++/10 -I/usr/include -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/llvm-14/lib/clang/14.0.0/include -I/usr/include/x86_64-linux-gnu --include /home/alex/workspace/mtess/MTESS/build/MTESS_autogen/moc_predefs.h --output-dep-file -o /home/alex/workspace/mtess/MTESS/build/MTESS_autogen/MLM4FWGUYC/moc_NearFieldProcessUtil.cpp /home/alex/workspace/mtess/MTESS/src/Layers/ViewLayer/Process/NearFieldProcessUtil.h

Output
------
usr/include/c++/10/bits/fs_fwd.:39: Parse error at "std"
Run Code Online (Sandbox Code Playgroud)

相同的代码库在 Windows 中使用qmake成功编译,我正在将编译方法转换为cmake,这不应该是代码问题,而是 cmake 配置或工具链兼容性问题。我的问题是:

  1. 如何让cmake使用特定编译器的唯一包含的?

    正如你所看到的,似乎 3 个包含的 gcc-10、gcc-11、clang-14 都被使用了。我尝试卸载 gcc-10,但 clang-14 依赖于它,并且我使用了 update- alternatives指定 gcc、g++、clang 和 clang++。

  2. 如何调试这种标准库moc解析问题?

    我以前遇到过类似的MOC解析问题,不是在usr/include/c++/10/bits/fs_fwd.:39上,而是在另一个gcc头文件上,经过一些卸载/安装后,这个问题消失了,但实际上我不知道怎么消失了。这种问题可能有点普遍,有什么方法可以解决它们吗?

小智 6

我也遇到了这个问题。这似乎是一个未解决的错误,moc当该filesystem标头包含在任何 Qt 标头之前时会触发该错误。

#include <filesystem>下面移动#include <QApplication>解决了我的问题。