项目介绍

用QT 5.15.2 创建了一个QT控制台项目,选择构建和运行套件为 “Desktop Qt 5.15.2 MSVC2019 32bit” 或者 “Desktop Qt 5.15.2 MSVC2019 64bit”, 会直接报错。另一方面,选择构建和运行套件为 “Desktop Qt 5.15.2 MinGW 32bit” 就没有报错的问题,这说明什么呢,这说明Qt 5.15.2 的安装是没有问题的,因为MinGW是QT的默认编译器套件。而MSVC是VS的默认编译器,前者报错,说明VS的安装可能缺少了某些组件。

报错信息

errorHint.png

从错误信息中可以看到,在预处理指令“#include <QCoreApplication>”中发生了错误,错误提示为“In included file: static_assert failed "Error in C++ Standard Library usage."”,也就是说,在QCoreApplication文件包含的子文件中,发生了静态断言失败:在引用C++标准库时发生了错误。根据semantic issue中的提示“yvals_core.h:829:1: error occurred here”可知,错误发生的位置是在“yvals_core.h”文件的829行1列的位置,进入这个文件,看看在执行什么断言

errorHint2.png

从上图可以看到,在执行以下语句时发生了错误:

#if __clang_major__ < 15
_EMIT_STL_ERROR(STL1000, "Unexpected compiler version, expected Clang 15.0.0 or newer.");
#endif // ^^^ old Clang ^^^

在判断 clang_major 的主版本号时,触发了标准库错误,错误号为“STL1000”,错误信息为“Unexpected compiler version, expected Clang 15.0.0 or newer.”。clang是苹果公司开发的C/C++/Objective-C的编译器,这个错误说明,我们的VS安装的Clang编译器组件的主版本号小于15或者没有安装Clang编译器组件。

解决错误

既然知道了错误的原因是VS安装的Clang版本太低或者没有安装Clang,所以我们只需通过VS安装一个版本大于等于15的Clang组件即可。
vsInstaller.png

可以看到,我的VS的确未安装C++ Clang编译器,我们试着安装下,看下能否解决QT选择MSVC套件报错的问题。
安装后并没有解决报错的问题,我安装的是VS2022,但是QT创建的项目却是2019的。
我们在VS中安装扩展QT Visual Studio Tools来打开这个MSVC2019的控制台项目试一下,编译报错:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 MSB8020 无法找到 Visual Studio 2019 的生成工具(平台工具集 =“v142”)。若要使用 v142 生成工具进行生成,请安装 Visual Studio 2019 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。 DesignModels C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets 456

根据提示,我们将工具集升级到版本v143

正在升级项目“DesignModels”...
配置“Debug|Win32”: 将平台工具集更改为“v143”(之前为“v142”)。
配置“Release|Win32”: 将平台工具集更改为“v143”(之前为“v142”)。
重定目标结束: 1 个已完成,0 个未通过,0 个已跳过

OK,到此为止,我们可以在VS2022中来编写QT代码了,但QT中还是会报错,没办法,在QT Creator中就只能选择MinGW套件来构建项目了。
另一种解决方法是把clangd给关闭了,因为clangd会进行静态代码的检测,报错也是由clangd发出的。
cancelThis.png

最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏