vs error 或 qt error: rc.exe 、ucrt.lib 、 ucrtd.lib windows sdk 版本

15 篇文章 0 订阅

问题描述:使用qt version 5.12.0(qt creator version 4.8.1) ,使用编译器vs2015。

在新电脑未使用过vs的电脑上 使用vs或qt编译项目时。出现无法运行rc.exe。

qt中出现 无法运行rc.exe​​​​​
vs中出现 无法运行rc.exe

原因:这其实是vs所依赖的windows SDK版本缺失导致,安装对应的windows SDK就好了。

不同版本的vs 要求的windows sdk版本是不一样的vs安装过程中默认不勾选的windows sdk,因为安装windows sdk时间比较长。如果电脑中现有的windows sdk版本与对应版本的vs要求的可选的windows sdk版本不符,就会出现这个错误出现。比如你电脑中默认的sdk版本最高版本为10.0.10133,而vs2015要求的可选的版本有10.0.14393/10.0.10586/10.0.10240,那vs安装后编译时就会出现这个问题。(需要注意,vs2013、vs2015、vs2019要求的windows sdk版本是有差异的,有可能你电脑中现有的windows sdk与对应的vs不匹配)最好是在安装vs的时候就勾选好一个最高版本的sdk,如下图所示。

可以在vs的安装过程中查看vs可选的windows sdk版本(或者windows sdk也可通过 控制面板->程序->程序和功能->visual studio 2015->更改->修改 中查看)。
也可以从Windows SDK 和模拟器存档 | Microsoft Developer 下载到对应的一个版本安装(windows sdk也可通过 控制面板->程序->程序和功能->visual studio 2015->更改->修改 安装,但是这个过程比较慢),这种方式在工程配置中可能需要手动设置目标平台。

至此,那个rc.exe 的问题就解决了。

至于ucrtxxxx.lib(universal c runtime)或头文件的问题,那应该是qt的配置的问题。qt中的windows sdk参数是不会自己动的(qt只在安装的时候获取最新的sdk),安装的时候获取到什么样就一直保存成什么样,如果先安装好了qt后再改动windows sdk,就需要手动更改qt中的windows sdk配置参数,如下:

这样qt就能正常使用vs编译器了。

问题处理过程(以下描述这个问题解决过程的经验,纯属废话):

该问题在之前工作中就碰到过,当时的解决办法是向网上说的直接拷贝rc.exe 到vs的目录下,但是感觉这不是一个规范的操作。并且也碰到过所有程序安装完就能正常跑的情况, 所以感觉应该是有什么操作过程出了问题。

首先在网上的拷贝操作让我感觉这个不是qt的问题,且查看一个qt工程中的 .qmake.stash ,Makefile ,Makefile.Debug 等文件,以及qt的配置中,都没有找到rc.exe的身影,所以猜测这个问题应该是与vs有关系。

在 控制面板\程序\程序和功能 ,对vs进行修复,还是如此。感觉可能与其中vs相关的程序有关系,第一眼看到了microsoft visual C++ 2015-2019 Redistributable这个东西,可能(盲目瞎猜)有关系(使用vs开发的C++ release 程序 需要用这个东西,它主要是在windows/system32 和windows/SysWOW64中安装msvcp140xxxx.dll库)。然后卸载,重装microsoft visual C++ 2015 Redistributable。还是如此,且打开了vs的一个实验程序,编译也没有问题。

然后在程序和功能中看到了Windows software development kit字样,看到已经安装了10.0.17763 ,猜测可能与windows sdk有关系 ,因为rc.exe就是windows sdk中的,且qt依赖windows sdk中的库、头文件、及cdb等工具。然后查看vs工程中是不是有修改sdk版本的,改成10.0.17763(这时候突然想起,qt中肯定一个地方是可以配置windows sdk版本的,确实是找到了)。出现了

这下就确定了,原来就是vs的原因。之前运行vs的工程没有问题,是一直没有注意 目标平台版本 ,一直是默认的8.1。改成10.0.17763问题就出来了。

然后猜测可能是vs关联依赖的windows sdk出问题了,首先做的不是修复,而是下载一个更新的,10.0.19041.0(基于新的东西肯定修复的bug更多的观点)。然后还是出现“无法运行rc.exe”。

又猜测,难道是vs安装出问题了?(此时偏离了sdk的想法了)控制面板\程序\程序和功能 vs,查看vs中是否有遗漏的东西没有安装好,又选择更改。然后进入我眼帘的是圈起来的部分,因看字 与c++最接近了,试一下,勾上,更新(要吐槽一下,vs的每一词这样的操作都是要一个小时左右,太坑)

一个小时过后,还是"无法运行rc.exe"。但是意外测试使用8.1版 sdk的还是能正常运行

然后猜测会不会是10.0.19041.0 不支持,且10.0.17763坏掉了。然后对10.0.17763进行一个修复,同时10.0.19041.0进行卸载,
再运行vs工程,出现了下面这个问题。

网上再找,说是sdk坏掉了。舍不得卸载。可能是我修复的方式出问题了,然后猜测会不会在vs安装的时候有sdk选项,又重新进到安装截面翻一遍。然后发现了下面这个。

对比一下我现有的版本10.0.17763,猜测,难道vs 2015 对 windows sdk的版本有要求?果断选了那个从名字中工具多一个的那个,且是里面最新的。一个小时后,配置vs的工程,选择 目标工作平台 10.0.14393 。

啊,清爽了。好了。rc.exe问题终于消失了。qt上测试,也是如此。

然后继续,配置vs工程 目标工作平台 10.0.17763,还是出现bemapiset.h的问题。又想着再试着安装一下10.0.19041.0。5分钟过后,10.0.19041.0的配置,也没有出现 “无法运行rc.exe”的错误。猜测10.0.17763 应该是被玩坏了,然后卸载了。

为了排查清楚vs是否与sdk版本有关系,然后卸载 windows sdk 10.0.14393。选用10.0.19041.0,问题果然又出现了,vs qt中都出现了。

然后在网上搜索是否vs的对windows sdk版本有要求。没有搜到有用信息,但是发现了windows sdk的下载路径。顺便将10.0.14393下载过来,安装,测试。运行成功。看来vs安装中的那个tools是没有用的。

同时单独测试10.0.10586,居然也能运行成功。10.0.10586 搭配10.0.19041.0。两者都能运行成功,卸载10.0.10586只剩下10.0.19041.0又失败。至此,确定了,vs2015对 windows sdk版本是有要求的。

然后再网上找,说是sdk出问题了

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值