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

相关推荐
“AI国潮设计-小江”7 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人7 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
sunshine22 girl8 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
菜鸟~noob2339 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫10 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_10 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
搭贝10 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子11 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/11 小时前
7.javase-面向对象
java·开发语言
weixin_5310946911 小时前
heap_4内存管理
java·开发语言·算法