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

相关推荐
小陈工3 小时前
Docker容器化部署Python应用——从开发到生产的全流程
运维·开发语言·python·docker·云原生·容器·数据挖掘
载数而行5203 小时前
Qt事件event分发,事件和信号关系,事件过滤
qt
代码方舟3 小时前
Java金融风控实战:集成天远二手车估值API构建车贷抵押资产核验系统
java·开发语言·python·自动化
吴声子夜歌3 小时前
JavaScript——面向对象
java·开发语言·javascript
阿kun要赚马内4 小时前
Python五类数据容器的对比和通用方法
开发语言·python
RE-19014 小时前
Polars:告别 Pandas 性能瓶颈,用 Rust 驱动的 DataFrame 库处理亿级数据
开发语言·rust·pandas·polars·ai生成
载数而行5204 小时前
Qt鼠标处理的项目,包含事件分发、处理机制
qt
2301_793804694 小时前
C++中的备忘录模式
开发语言·c++·算法