卸载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字段,同上操作一样

相关推荐
无限进步_21 小时前
【C++】weak_ptr、循环引用与线程安全
开发语言·数据结构·c++·算法·安全
菜菜的顾清寒1 天前
力扣hot100(37)栈-有效的括号
java·开发语言
Circ.1 天前
Java 远程调用 NX 11 完整实战:参数读取、修改、STP 文件导出(附环境配置 + 源码)
java·开发语言·nx11
2401_833269301 天前
【无标题】
java·开发语言
宇宙realman_9991 天前
420B污染度等级查询代码
java·开发语言·算法
小白学大数据1 天前
Playwright 爬虫:Python 爬取 JS 渲染的 JSP 网站
开发语言·javascript·爬虫·python·数据分析
折哥的程序人生 · 物流技术专研1 天前
《Java 100 天进阶之路》第35篇:Java异常处理最佳实践
java·开发语言·后端·面试·求职招聘
AI玫瑰助手1 天前
Python函数:位置参数与关键字参数的使用
开发语言·python·信息可视化
如竟没有火炬1 天前
乘法表中第K小的数——二分
开发语言·数据结构·python·算法·leetcode·职场和发展·动态规划
凯瑟琳.奥古斯特1 天前
选择题专练数据库原理精选30题
开发语言·数据库·职场和发展·数据库开发