LNK1158无法运行rc.exe x64 Visual Studio

17

我正试图在Visual Studio上为64位平台编译一个简单的程序。但在尝试编译时,我遇到了错误:

LINK: 致命错误 LNK1158: 无法运行'rc.exe'

我去了许多讨论帖子,在那里它指示将Windows Kits文件夹中的rc.exe和rcdll.dll复制到VC/bin文件夹中。我已经做过这个,但是没有用。我想可能是我的Visual Studio版本并不是在我认为的目录中寻找这个rc.exe文件。有没有办法在Visual Studio内确定它正在寻找此可执行文件的目录?

(有人建议这个问题可能与Cannot compile with VC++/VS2010 targeting x64: LNK1158: cannot run cvtres.exe所提供的问题和答案重复。但是,这似乎并不是这种情况,因为那里的路径被某些正在系统上运行的NV服务破坏了。当我输入echo %PATH%时,我没有遇到这个问题。话虽如此,该链接确实引导我找到了正确的解决方案,详见下文)


尝试在Visual Studio选项中打开构建的“详细”输出。这在像这样的情况下总是对我有帮助。 - Ruslan Garipov
感谢这个指导。它还帮助解决了Qt Creator的LNK1158错误。问题是一样的。我只需要将rc.exe和rcdll.dll从VS路径移动到Qt的编译器路径即可。 - John
4个回答

29

错误确实出在我放置rc.exe和rcdll.dll文件的地方。因为我正在编译到64位平台,Visual Studio正在使用64位“交叉编译器”,它不驻留在$(VSInstallDir)\VC\bin中,而是在$(VSInstallDir)\VC\bin\x86_amd64文件夹中。

因此,解决我的问题的方法就是将C:\Program Files (x86)\Windows Kits\8.1\bin\x86文件夹中的rc.exe和rcdll.dll复制到$(VSInstallDir)\VC\bin\x86_amd64文件夹中。

这样做克服了第一个错误。

然而,在构建时,出现了一个新的错误:LNK1158:无法运行'cvtres.exe'。与我的第一个rc.exe错误相比,该文件实际上已经驻留在$(VSInstallDir)\VC\bin文件夹中。问题是交叉编译器正在寻找它自己的目录。所以我只需将该文件从$(VSInstallDir)\VC\bin文件夹复制到$(VSInstallDir)\VC\bin\x86_amd64文件夹即可。

一旦我这么做了,我的项目就可以构建和运行了。


我在尝试安装Scrapy时遇到了你上面提到的第一个错误。解决方案的第一部分对我有用。谢谢! - Fandango68

22

我在VS2015的Windows 10上编译Python代码时遇到了这个错误,代码复制到anaconda3上。

rc.exe

rcdll.dll

从以下路径中复制:

C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64

并粘贴到Visual Studio安装文件夹中:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

成功生成了代码。


2
太好了,这对我有用。当尝试通过pip安装odoo要求时出现了问题。 - Tee
当我尝试在Windows 10上通过setup.bat设置MobSF时,这对我起作用了。 - Harri
Windows Kits\10\bin\10.0.22621.0\x64 在这里检查一下;我还不得不复制ServicingCommon.dll,因为否则rc.exe会抱怨找不到那个文件。 - undefined

0

将环境变量设置为包含缺失文件的文件夹,比复制文件更简单。

set WINKITS="C:\\Program Files (x86)\\Windows Kits\\8.0\\bin\\x86"
set PATH=%WINKITS%;%PATH%

8.0替换为您自己的Windows Kits版本


0

在尝试构建mod_wsgi Python 模块时,我遇到了这个问题。最干净的解决方案是首先找到正确的rc.exe,然后将该文件夹添加到PATH环境变量中。一旦重新启动cmd,应该可以解决此问题。

正如其他人所提到的,可以在以下位置找到rc.exeC:\Program Files(x86)\Windows Kits\10\bin\<version>\x64

这个文件不太可能会在不同版本之间改变,但如果您正在编译64位,则选择x64,如果要编译32位,则选择x86很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接