qt构建时出现《无法运行“rc.exe”》

20 阅读3分钟

问题:qt构建出现 无法运行“rc.exe”

image.png

背景:安装了多个vs和qt

原本我的电脑是安装了vs2015和qt5.6.2,后续我又安装了vs2017和qt5.9.2以及5.12.8,这样我的电脑里就有3个版本的qt和两个版本的vs。

当我尝试跑qt的项目时发现,原先的qt项目跑不起来了。构建时就出现error: LNK1158: 无法运行“rc.exe”,我简单的创建一个控制台的测试程序,发现也是一样,构建时出现这个错误,安装的这几个版本都是这样,除了qt5.12.8,这个可以正常运行。

rc.exe是windows套件中的一个命令行程序(Microsoft Windows 资源编译器 (RC)) 用于生成基于 Windows 应用程序的工具。

我的qt项目编译器都是msvc编译器,依赖于vs。现在vs有多个版本,qt也有多个版本,但是qt每个版本对msvc的支持是不一样的,比如qt5.6.2和5.9.2是依赖于msvc2015,而qt5.12.8则是依赖于msvc2017,这个是在创建项目时配置编译器时配置的。所以出现这个报错的原因也应该和这个有关

解决

报错信息里提示链接错误,也就是链接失败了,一般链接失败,那就是找不到对应的目标对象。

1、everything工具查找rc.exe

我们使用everything工具来查找下rc.exe程序

image.png

可以找到这些rc.exe文件。可以看到这些文件都在一个叫做Windows Kits的文件夹下,10就是代表的win10系统套件,这些套件的安装是咱们在安装vs时,安装选项中有组件选择,我们勾选了哪些windows kits,它就会对应的下载哪些。

image.png

实际上我windows kits套件有好几个,但是却只有10.0.17763.0的版本有rc.exe程序,按理来说其他的版本应该也有,这个可能在vs2017下载的时候给干掉了,也不清楚,不过这都没事。最新版本有就行。

2、查看qt项目的构建环境

以qt5.9.2为例,可以看到WINDOWSSDKLIBVERSION,系统sdk版本是10.0.17763.0。

image.png

既然,qtcreator它找不到rc.exe程序,那我们就直接将对应架构(如x86或x64亦或者是arm64)的这个程序拷贝到qt对应的目录下,那这样不就可以找到了

3、拷贝rc.exe和rcdll.dll

所以我们使用everything找到对应系统sdk版本是10.0.17763.0,且架构是x86的rc.exe文件,因为我的qt项目都是x86配置

image.png

所以我们要拷贝x86架构的对应程序及dll动态库qt对应msvc版本和架构的目录下

还是看到everything,找到对应路径下的rc.exe

image.png

鼠标右键选择rc.exe打开文件路径

image.png

复制这两个文件到,对应版本的qt目录下如qt5.9.2(\Qt5.9.2\5.9.2\msvc2015\bin)

由于我的qt5.9.2安装时勾选了多个编译器,所以可以看到,5.9.2目录下有多个编译器目录

image.png

我们要找到我们项目使用编译器版本的对应的编译器目录,比如我在5.9.2中创建的项目一般就是用msvc2015 32位的,那么就进入msvc2015目录bin下,并将rc.exe和rcdll.dll拷贝进去。

image.png

4、构建运行测试程序

拷贝后,我们重新构建程序

image.png

可以看到构建正常了

我们运行程序

image.png

程序成功运行

5、其他版本

处理方式相同,注意拷贝目录要和我们项目编译器目录对应上即可