问题:qt构建出现 无法运行“rc.exe”
背景:安装了多个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
程序
可以找到这些rc.exe
文件。可以看到这些文件都在一个叫做Windows Kits
的文件夹下,10就是代表的win10系统套件,这些套件的安装是咱们在安装vs时,安装选项中有组件选择,我们勾选了哪些windows kits,它就会对应的下载哪些。
实际上我windows kits套件有好几个,但是却只有10.0.17763.0
的版本有rc.exe
程序,按理来说其他的版本应该也有,这个可能在vs2017下载的时候给干掉了,也不清楚,不过这都没事。最新版本有就行。
2、查看qt项目的构建环境
以qt5.9.2为例,可以看到WINDOWSSDKLIBVERSION,系统sdk版本是10.0.17763.0。
既然,qtcreator它找不到rc.exe程序,那我们就直接将对应架构(如x86或x64亦或者是arm64)的这个程序拷贝到qt对应的目录下,那这样不就可以找到了
3、拷贝rc.exe和rcdll.dll
所以我们使用everything找到对应系统sdk版本是10.0.17763.0,且架构是x86的rc.exe文件,因为我的qt项目都是x86配置
所以我们要拷贝x86架构的对应程序及dll动态库
到qt对应msvc版本和架构的目录下
还是看到everything,找到对应路径下的rc.exe
鼠标右键选择rc.exe
打开文件路径
复制这两个文件到,对应版本的qt目录下如qt5.9.2(\Qt5.9.2\5.9.2\msvc2015\bin
)
由于我的qt5.9.2安装时勾选了多个编译器,所以可以看到,5.9.2目录下有多个编译器目录
我们要找到我们项目使用编译器版本的对应的编译器目录,比如我在5.9.2中创建的项目一般就是用msvc2015 32位的,那么就进入msvc2015目录bin下,并将rc.exe和rcdll.dll拷贝进去。
4、构建运行测试程序
拷贝后,我们重新构建程序
可以看到构建正常了
我们运行程序
程序成功运行
5、其他版本
处理方式相同,注意拷贝目录要和我们项目编译器目录对应上即可