卸载VS2015,安装VS2017后Qt报错问题

卸载VS2015,随后安装VS2017后,再使用QT,发现各种报错问题:
切记:在构建项目前,一定要先删除原来的临时目录,比如shadow build对应的目录,否则构建失败的错误会看不懂


  • 问题1:执行qmake时报错,:error: Cannot run compiler 'cl'. Output:
    原因:该问题通常是由于由于编译器cl.exe未正确配置或缺失所导致的
    解决方案:将cl.exe的路径配置到环境变量Path中即可

使用EveryThing搜索cl.exe,如下:

将对应cl.exe文件的目录,添加到环境变量Path中即可

上图中有四个包含cl.exe的目录,注意不要设置错误,否则可能会出现以下的报错:

Qt5Widgetsd.lib(Qt5Widgetsd.dll):-1: error: LNK1112: 模块计算机类型"x64"与目标计算机类型"x86"冲突

cl.exe是什么?

cl.exe 是微软 Visual Studio 套件中的 Microsoft C/C++ 编译器。它只能在支持 Microsoft Visual Studio for Windows 的操作系统上运行。cl.exe 主要用于将 C 和 C++ 源代码编译成目标文件 (.obj) 并将其链接成可执行文件 (.exe) 或动态链接库 (DLL)。

要使用 cl.exe,首先需要安装 Visual Studio 以及 C 和 C++ 支持。安装完成后,可以在 Visual Studio 的 bin 目录下找到 cl.exe。通常有四个版本:Hostx64-x64,Hostx64-x86,Hostx86-x64,Hostx86-x86。

这四个版本对应着不同的含义,从命名可以看出来,前半部分为当前平台(宿主平台),后半部分为目标平台Host{宿主平台}\{目标平台}

目录 宿主平台 目标平台 主要用途和场景
Hostx64\x64 64位 x86平台 64位 x86平台 最常用。在64位x86架构上,编译生成64位程序(库)。性能和兼容性最好。
Hostx64\x86 64位 x86平台 32 位 x86平台 在64位x86架构平台上编译生成32位x86架构的程序(库),用于需要兼容32位依赖库的场景。
Hostx86\x86 32位 x86平台 32位 x86平台 在32位平台上,编译生成32位程序。现代64位平台上较少直接使用。
Hostx86\x64 32位 x86平台 64位 x86平台 在32位平台上,编译生成64位程序。这是一种交叉编译,现在非常罕见。
  • 核心概念:

    宿主平台:指 cl.exe编译器本身运行所需的操作系统环境。Hostx64表示这是一个64位程序,需要在64位Windows上运行。

    目标平台:指编译器生成的可执行文件或库所运行的平台。x86输出32位程序,x64输出64位程序。

  • 为什么需要这么多版本?

    主要是为了支持灵活的开发和部署需求。例如,在当今主流的64位Windows系统上:

    开发64位软件时,使用 Hostx64\x64。

    开发需要向下兼容的32位软件时,使用 Hostx64\x86。不需要切换到32位系统就能编译32位程序。


  • 问题2
    编译程序报错: error: C1083: 无法打开包括文件: "type_traits": No such file or directory
    根因:这是因为VS对应的头文件目录没有添加到环境变量导致
    解决方案:将VS对应的头文件和库文件都添加到环境变量

    查看Qt构建的环境变量,发现INCLUDE字段中不包含VS2017 C++ 的头文件
    使用Everything搜索:

    到环境变量设置,将该目录添加到INCLUDE字段中,如果发现环境变量中没有INCLUDE字段,则新建一个INCLUDE字段,然后将上图中Qt的环境变量都拷贝到新增的字段中,并且将VS的C++头文件目录也添加到该字段中

若报错,无法找到xxx.lib库,则是VS2017 的C++工具中,对应的库文件没有添加到环境变量,同样使用Everything搜索该库文件,然后将其路径添加到环境变量LIB字段中,若环境变量中没有LIB字段,同上操作一样

相关推荐
敲代码的嘎仔12 分钟前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森30 分钟前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python
杜子不疼.31 分钟前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
老迟到的茉莉2 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python
学逆向的2 小时前
汇编——内存
开发语言·汇编·算法·网络安全
lbb 小魔仙2 小时前
MuMu 模拟器 6.0 硬核测评:这次升级确实不一样
java·开发语言·模拟器·mumu·硬核测评
r_oo_ki_e_2 小时前
Java 线程池
java·开发语言
杜子不疼.3 小时前
【Qt初识】信号槽(二):自定义信号函数与槽函数
开发语言·qt
ctrl_v助手3 小时前
C#日志工具类log4net的使用
开发语言·c#
秋田君4 小时前
Qt_QVariant
开发语言·qt