Visual Studio 由于rc.exe而无法构建

154

我在网上搜索了一下,没有找到与我的问题相似的内容。

我创建了一个空的C++项目,并添加了一个带有返回值的main.cpp文件,但是我无法构建它。这是我收到的消息:

1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1158: cannot run 'rc.exe'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

在VS2012中是否有地方可以指定要查找此可执行文件的位置?我已经安装了Windows 7 SDK,并且我在这里拥有这个可执行文件:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin

我来自Code::Blocks,并且一直使用mingw-gcc没有任何问题,但最近我需要VS来进行托管实现,所以希望有人能够提供一些想法。


FYI - 在 Visual Studio 2013 Professional 中也出现了问题 :( - gbjbaanb
但看起来问题是路径指向Windows SDK目录(或Windows Kits,无论他们这周称之为什么)。$(WindowsSdkDir) 变量未设置为WindowsKits目录,而是被设置为WindowsSDK目录,其内容“最小化”。 - gbjbaanb
5
解决由于安装VS2017而导致类似VS2015问题的好方法:https://dev59.com/dFcP5IYBdhLWcg3wyc3W#45319119 - Isaiah Norton
1
请务必阅读这个重要的QA https://dev59.com/dFcP5IYBdhLWcg3wyc3W - Fattie
28个回答

279

在谷歌上找到这个...我认为在你的情况下,你需要将 rc.exercdll.dll 复制到 visual studio 2012\vc\bin 或任何你安装它的地方:

第二步:修复链接: fatal error LNK1158: cannot run ‘rc.exe’

将此添加到您的 PATH 环境变量中:

C:\Program Files (x86)\Windows Kits\8.0\bin\x86

复制以下文件:

rc.exe
rcdll.dll

C:\Program Files (x86)\Windows Kits\8.0\bin\x86

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

或者我还发现了这个:
微软在他们的 MSVT 包中漏掉了一些东西。由于没有人知道是不是因为疏忽才漏掉了它们,还是因为许可证原因才漏掉了它们,所以没有 MSVC 用户太有兴趣提供它们。通过一些棘手的来源可以找到一些谷歌搜索结果。幸运的是,微软最终聪明地解决了这个问题和许多其他问题。

http://msdn.microsoft.com/vstudio/express/support/faq/default.aspx#pricing

http://msdn.microsoft.com/vstudio/express/support/install/

大量 MSVT 缺失文件都在那里,但缺失的 SDK 文件不在其中。

以及这个:
我遇到了相同的问题,解决方法如下:

  1. 安装 Microsoft .Net Framework 2.0
  2. 在 Code::Blocks 的全局编译器设置中添加 .NET Framework 文件的路径(对于我来说是 "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727")到 Programs > Additional Paths。

现在我可以成功地构建和链接资源文件了,没有错误发生。


6
谢谢,这只是将 SDK bin 中的 rc 可执行文件复制到 VS bin 中的简单步骤。 - Patrick.SE
1
问题:为什么您使用x86的rc.exe和rcdll.dll文件,而不是x64版本? - Carl
1
我只是复制并粘贴了我找到的答案...但是在32位安装上您将使用x86(即使在64位系统上也可能如此),而在64位安装上您将使用x64...猜测这取决于文件应该拥有哪个版本。 - Kat Cox
6
我在 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64,执行以下命令: copy "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\rc.exe"copy "C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\rcdll.dll" 以解决在Visual Studio 2015中的问题。 - Jari Turkia
3
我在安装PYANGBIND时遇到了这个问题,通过将C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64下的rc和rcdll复制并粘贴到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64中解决了它。 - Aneesh Damodaran
显示剩余7条评论

68
我们在安装了VS2017后,使用CMake/Visual Studio 2015构建时遇到了此问题。我们的正确解决方案是在Visual Studio命令提示符中指定Window Kit版本(8.1),否则默认会获取不包括bin目录中rc.exe的Windows 10 Kit。例如:开始菜单->Visual Studio 2015->VS2015 x64本机工具命令提示符。
%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 8.1

注意结尾处的8.1选项


6
我认为这是解决这个问题的正确方法。 - jagttt
3
虽然我和你情况相同(Win10上同时安装了VS2015和VS2017),但这个方法对我无效。唯一解决我的方法是手动将包含rc.exe的最新SDK版本路径"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin"添加到PATH环境变量中! - Scylardor
@Scylardor - 你使用的路径是7.1 SDK的路径。你是否在C:\Program Files (x86)\Microsoft SDKs\Windows下安装了8.1 SDK?在你的情况下,可能可以在命令末尾使用相同的7.1命令,或者你可能需要安装8.1 SDK。 - MattAU
我创建了一个批处理文件,其中包含 call C:\\(....)\vcvarsall.bat" amd64 8.1start cmake-gui,非常顺利。 - Marius
谢谢,我也有完全相同的设置(并排使用VS),这比复制文件要*干净得多! - E. Moffat

35

据我所发现,如果您使用的是Windows 7操作系统,则执行以下步骤将修复问题:

1)前往C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin

2)然后从此文件夹中复制RC.exe和RcDll

3)前往C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin,并将您复制的两个文件粘贴到其中。

我也曾遇到同样的问题,上述发布的解决方案没有起作用。我的解决方案源自它,并且它对我有效,如果上述方法不起作用,您可以尝试这种方法。


4
令人困惑的是,这对我也起作用了,将文件从v7.1A\Bin复制到Microsoft Visual Studio 14.0\VC\bin。 - escapecharacter
这在我安装了VS 2017和VS 2015的Windows Server 2012上没有起作用。 - iLikeDirt
这对我在2021年6月的Windows 10上也解决了问题。谢谢! - Guy Starbuck

18

如果 Visual C++ 编译器和 Windows 10 SDK 版本不对应于同一个 Visual Studio 年份,就可能会出现这个 rc.exe 错误。通常的解决方法是确保你的系统上安装了并且在编译时使用了与你所使用的 Visual Studio 年份相对应的 VC++ 和 Windows SDK。

例如,如果你安装了 Visual Studio 2017 或 2019,并安装了 Build Tools 2015(默认安装不会安装其自己的 2015 Windows SDK!)并试图使用它进行编译,就可能遇到这个问题。

在我的情况下,我已经安装了 Visual Studio 2017。当我试图使用 Build Tools 2015 编译 Python 库(或者可能是任何程序)时,就发生了相同的“rc.exe”错误。我读到,如果 VS2015 14.0 C++ 编译器尝试使用来自 Visual Studio 2017 的 Windows 10 SDK,则会出现故障。

我卸载了 Build Tools 2015 并重新安装它,这次作为一个自定义安装,选择安装Visual C++和Windows 10 SDK组件,这修复了该问题。

更新:我刚刚再次查看了 Build Tools 2015,显然现在没有自定义安装选项了。如果是这样的话,安装带有 C++ 和 Windows SDK 组件的 Visual Studio 2015 也应该可以解决问题。编辑:评论者已经找到了可自定义的构建工具安装程序


2
非常感谢,这确实是正确的解决方案。注意:我尝试通过安装程序的“修改”命令添加SDK,但它卡住了。不得不重新启动,卸载,然后重新安装。 - Violet Giraffe
有人能帮忙澄清一下“...重新安装了它[Build Tools 2015],这次是自定义安装,选择安装Visual C++和Windows 10 SDK组件。”的意思吗?从哪里安装?从Microsoft独立安装? - estebro
@estebro 如果你在谷歌上搜索“Build Tools 2015”,并点击第一个链接,你将被带到微软的下载页面,下载并安装该独立包。但是,如果你遇到rc.exe问题,请不要让该程序默认安装。相反地,选择自定义安装,并确保启用Windows SDK的安装(它不是默认选项)。 - JoseOrtiz3
1
这是真正的、概念上正确的答案。其他所有的都是可能不起作用的黑客方法;对我来说,它们都没有起作用。 - iLikeDirt
1
这太妙了!感谢你清晰的解释。我遇到了完全相同的问题,一些人责怪安装过程是个误导,我重新安装了五次却得到了同样的结果。 - Ananth
1
看起来你仍然可以在这里获取可定制的2015安装程序:https://visualstudio.microsoft.com/vs/older-downloads/ - inkychris

11
在我的情况下,我遇到了VS2015和VS2017创建的项目在混合时出现错误。在我的.vcxproj文件中,有一个名为PropertyGroup Label="Globals"的部分。我有一个TargetPlatformVersion=10.0.15063.0的部分。当我移除了TargetPlatformVersion时,问题得到了解决。
抱歉,我不能将代码块复制粘贴到这里,因为stackoverflow的编码格式不允许这样做。

已解决。谢谢。 - My1

10
在我的情况下,我使用的是Windows 10 x64和VS 2019。我大多按照回答中的说法操作,但是将C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86中的rc.exercdll.dll粘贴到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin目录下,这个目录就是link.exe所在的位置。

1
这对我有用,我需要让 pip install brotlipy 起作用。 - Unknow0059

8
我正在使用Windows 7 x64和Visual Studio 2017。当我尝试编译cython脚本时,出现了这个错误。 这是我解决的方法: 我从以下位置复制并粘贴了rc.exe和rcdll.dll:
C:\Program Files (x86)\Windows Kits\8.1\bin\x86

为了

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

4
这些指令适用于32位操作系统。对于64位操作系统,请尝试使用以下路径:从C:\Program Files (x86)\Windows Kits\8.1\bin\x64C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64 - Contango
对于我们使用Cython,这个方法有效:我们将C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64复制到C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64以解决由rc.exe错误导致的Visual Studio无法构建的问题。 - Brandon W. King

4
在我的情况下,错误是由vcxproj中的错误设置引起的。vcxproj来自第三方,所以我不确定它是如何处于那种状态的。
具体而言,对于其中一个平台/配置组合,Windows SDK bin文件夹中缺少了平台文件夹:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 <ExecutablePath>$(VCInstallDir)bin\x86_amd64;$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir)bin\x86;

是正确的,其中

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 <ExecutablePath>$(VCInstallDir)bin\x86_amd64;$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir)bin;

之前的代码是错误的。您可能需要向代码框的末尾滚动以查看差异。

还要注意的是,由于某些奇怪的原因,$(WindowsSdkDir)bin\x64;在我的电脑上没有起作用。我试图找出为什么,在那个文件夹中确实存在rc.exe,但我放弃了。

我认为,之前帖子中涉及将rc.exe复制到各处的解决方案是错误的,因为您的项目在任何其他人的计算机上都无法工作。如果您正确修复项目中的路径,则应该可以在安装了Windows SDK的任何计算机上运行。


4

以下是我类似的案例:
我有一个在Win7 32位下工作的VC2010项目。我在Win8.1 64位下进行了VC2013的干净安装。 在成功将我的项目从VC2010转换到VC2013后,在第一次编译期间出现以下错误:
完成代码生成
链接:致命错误 LNK1158:无法运行“rc.exe”

解决方案1:
在运行VC2013之前,删除NameOfYourSolution.vcxproj文件中“<PropertyGroup>”元素中的整行“<ExecutablePath Condition=”...”>...</ExecutablePath>”在记事本中。
解决方案2:
仅复制两个文件:rc.exe和rcdll.dll从“c:\Program Files (x86)\Windows Kits\8.1\bin\x86\”到“c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\”,编译就会成功!
注意:
a)不需要更改任何路径或其他Windows或VC环境变量。
b)“平台工具集”(项目属性页面 -> 配置属性 -> 常规)将自动设置为“Visual Studio 2013(v120)”(不要将其更改为“Visual Studio 2010”,以便能够继续在VC2013概念下开发您的项目)


4
我是Windows 10 x64和Visual Studio 2017上的助手。我从以下位置复制并粘贴了rc.exe和rcdll.dll:
C:\Program Files (x86)\Windows Kits\8.1\bin\x86

to

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

它可以与以下软件一起使用:(Qt Creator 5.7.1)


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