VS 2015命令提示符中不再有rc.exe

80

我刚刚安装了Windows 10 Creators Update (版本号为10.0.15063)。

我安装了多个版本的Visual Studio (2012、2013、2015和2017),但只有几周前才安装了VS 2017。

问题

CMake(版本为3.8.1)在“VS2015 x64 Native Command Prompt”中运行时无法找到C/C++编译器(但在VS 2017命令提示符中运行正常)。

复现步骤

CMakeLists.txt的内容:

project (test)
add_executable (test test.cpp)

test.cpp 的内容不相关。)

在 VS2015 x64 本机命令提示符下进行的 CMake 调用:

> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..

CMake的输出:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_CXX_COMPILER could be found.

-- Configuring incomplete, errors occurred!
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeOutput.log".
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeError.log".

分析

查看 CMakeFiles/CMakeError.log 后,故障原因就很明显了:

ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
  CMakeCCompilerId.c
Link:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X64 Debug\CMakeCCompilerId.obj
LINK : fatal error LNK1158: cannot run 'rc.exe' [D:\dev\cmaketest\build\CMakeFiles\3.8.1\CompilerIdC\CompilerIdC.vcxproj]

rc.exe(资源编译器)未找到。确实,在相同的VS 2015命令提示符下:

> where rc.exe
INFO: Could not find files for the given pattern(s).

虽然在 VS 2013 命令提示符中找到了它: is

> where rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x64\rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe

和VS 2017命令提示符:

> where rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

在不同的VS命令提示符中检查PATH环境变量的内容:

  • Inside a VS 2013 command prompt, PATH contains

    C:\Program Files (x86)\Windows Kits\8.1\bin\x64
    
  • Inside a VS 2017 command prompt, PATH contains

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
    
  • But inside a VS 2015 command prompt, PATH only contains

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

    which does not contain rc.exe.

问题

  1. 这是一个已知的问题还是只存在于我的系统中?

  2. Windows 10创作者更新可能会安装、卸载或更改系统中的哪些内容(也许与Windows SDK相关),会导致出现这个问题?

  3. 有什么干净利落的方法来解决这个问题?

编辑:已安装VS 2017组件:

VS 2017 components installed


1
我刚遇到了和你几乎相同的操作系统和Visual Studio设置的问题。我正在尝试构建Wireshark(64位)。奇怪的是,在家里的两台机器上已经构建成功,但在我的工作机器上却遇到了问题。我手动添加了以下路径到PATH中: C:\Program Files (x86)\Windows Kits\10\bin\x64 C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64但这导致找不到'winver.h'。 - DaveCleland
1
你使用的是哪个版本的VS2015更新?在我的家用电脑上,运行着VS2015 Update 3,rc.exe位于路径C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.EXE中。 - DaveCleland
@DaveCleland 我正在运行 Visual Studio 企业版 2015 版本 14.0.25425.01 更新 3。 - François Beaune
五百赏金 - Fattie
1
展示这个问题的一个基本路径:(1)购买一台新的干净的Windows10机器(2018年底)。 (2)安装VS2017。 (3)改变主意,以某种方式卸载VS2017并安装VS2015。这似乎从根本上导致了“Windows cmake危机”的出现。 - Fattie
我找到了另一种解决方案,适用于VS2015和任何Windows 10 SDK,不涉及将某些不确定的RC.EXE副本放入路径中,甚至不需要更新路径,也不必从Visual Studio命令提示符启动VS2015。我在类似的问题上写了一个答案:https://dev59.com/vGYq5IYBdhLWcg3wkRe_#69684610。 - UweBaemayr
13个回答

116

在三台安装了Win10 Creators Edition和VS2010、VS2013、VS2015和VS2017的计算机上检查了一段时间,其中两台机器可以正常工作,但第三台机器出现了故障。所有计算机都安装了VS2015更新3,并且应该选择了相同的选项。

运行以下批处理文件:

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

应该为VS2015 x64环境设置正确的环境。这应该会添加

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

rc.exe 添加到 PATH 环境变量中。这是 rc.exe 应该存在的位置。然而,在我的电脑上 rc.exe 不存在于这里,但它存在于

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

我回过头来,感觉这是一个设置问题,于是我重新运行了VS2015更新3安装程序,并告诉它添加

Windows和Web开发->通用Windows应用程序开发工具->工具(1.4.1)和Windows 10 SDK(10.0.14393)

这导致rc.exe和相关文件出现在

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

在运行 rc -v 命令时

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

提供了相同的版本号10.0.10011.16384

不确定为什么原始安装中缺少rc.exe,但重新运行安装并添加其他SDK对我有帮助。看起来像是

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

应该是默认的 rc.exe,但之前的安装没有设置它。


4
太棒了,感谢你进行了详细的调查。许多人都遭受着这个问题的困扰,但据我所知,直到现在还没有提供任何干净利落的解决方案。你的解决方案是第一个干净利落的解决方案,非常感谢! - François Beaune
1
可以正常工作了,只需将包含rc.exe的/bin路径添加到PATH变量中即可。 - Ivan Bilan
2
尽管vcvars64(或在C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC下的vcvarsall x64)添加了所需的路径并且重新安装将exe放入该路径中,但所有这些仅适用于开发人员的命令行; VS2015 IDE仍然无法找到rc.exe并输出相同的错误。因此,我们最好将指向rc.exe的路径添加到PATH环境变量中,无论它在哪里,这样我们就可以完成所有设置了。但我仍然要感谢这个答案,因为它至少让我知道rc.exe在哪里。 - user5280911
2
非常感谢您的支持 @DaveCleland。目前有一个细节(截至2018年末),似乎提供了三个版本的SDK进行安装。我坚持使用了10.0.10011.16384这个版本,这似乎是唯一使它正常工作的方法。 - Fattie
我找到了另一种解决方案,适用于任何Windows 10 SDK,不需要将某些不确定的RC.EXE副本放入路径中。我在类似的问题上写了一个答案:https://dev59.com/vGYq5IYBdhLWcg3wkRe_#69684610。 - UweBaemayr
安装5GB的额外内容只为了得到一个exe文件;<3微软 - Caius Jard

20

你绝对不是唯一一个遇到这个问题的人。我昨天安装了VS2017,但似乎也出现了同样的问题。我没有好的解决方案(应该向Microsoft报告此问题),但我有一个笨拙的解决方法。

我能够从

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

这解决了我的问题。我猜测是注册表键被覆盖了,但我还没有深入挖掘以确认。


1
谢谢。你确定要输入 C:\Program Files (x86)\Windows Kits\10\bin\x86 而不是 C:\Program Files (x86)\Windows Kits\10\bin\x64 吗? - François Beaune
在我的电脑上确实很奇怪。看起来很奇怪,但我的bin\x64中没有rc.exe或rc.dll。可能因人而异。 - Falcon
谢谢。@FrançoisBeaune 将文件复制到 x64 对我没有任何作用,但是 x86 很好用。 - TinyRacoon
1
在我的机器上它被称为rcdll.dll。我还需要复制mt.exe。尽管如此,它可以正常工作(将x86->x86和x64->x64进行复制)。 - kuga

8

我在使用Windows 10 15063.608 (Windows SDK 10.0.15063.0)时遇到了同样的问题。对我有效的解决方法是创建硬链接,将Windows 10 kit二进制文件的x64和x86文件夹链接起来,如下所示(使用管理员权限的命令提示符):

mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x86" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86"

mklink /J "C:\Program Files (x86)\Windows Kits\10\bin\x64" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64"

(在运行以下命令之前,请先将现有的 Windows Kits\10\bin\x64Windows Kits\10\bin\x86 文件夹重命名 - 看起来它们没有在使用中。)

P.S. mklink 是一个 CMD 命令,在 PowerShell 下不可用。


4
由于某种原因,内置的工具(1.4.1)和Windows 10 SDK(10.0.14393)安装程序并没有起作用:
  1. C:\Program Files (x86)\Windows Kits\10\bin\x86在安装过程中得到了填充(成功!)
  2. 然后被清空(遗憾!)
  3. 最终,安装程序返回错误-2147023293/0x80048646

但是“Windows 10 SDK(ver. 10.0.14393.795)”安装程序Windows SDK和模拟器存档中可以运行: C:\Program Files (x86)\Windows Kits\10\bin\x86得到填充,包括rc.exe

适用于Windows 7 x64,Visual Studio Professional 2015 Update 3。


2
  1. 运行您的在线安装程序vs_community2017.exe。
  2. 选择修改您的VS2017
  3. 选择桌面开发与C ++
  4. 选择Windows 10 SDK(我的版本是10.0.10586)并安装它

运行VS2015命令提示符:

> where rc
> C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
> C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe

看起来vs2017默认安装了最新的SDK,并覆盖了旧版本。


2
对于那些遇到困难的人,一个特定的问题集是:
  1. 获得一个新的Windows 10 PC
  2. 安装VS 2017 [*]
  3. 卸载 VS 2017 然后
  4. 安装VS 2015
如果你按照上述步骤操作,
看起来整个Windows/VS安装程序套件中存在着某种bug或其他行为。
基本上似乎有四个问题需要MSFT修复:(a)有时它只是不会安装rc.exe,(b)如果你“仅”要求c++东西,则不会安装rc.exe,你必须要求全部(c)卸载-安装过程在各种方式上都出现了混乱(d)即使它为你随机安装了rc.exe,它也会忘记或弄乱路径。
:/
长而乏味的故事简而言之,解决方案似乎包括一个或多个
  1. 基本上安装或重新安装10.0.10011.16384 (但仅限于这一个版本,不是后面的两个版本)
  2. 查找并查看rc.exe是否明确、彻底地不存在。如果是,请将其安装(任何位置)
  3. 在VS中,你可能认为你只需要安装c++东西,但不是。实际上,你必须勾选所有的web、blah blah开发内容。这似乎给了你“更多希望”获得rc.exe。完成此操作后,重新访问第2点,因为你可能仍然没有它。
  4. 完成步骤2和3,很可能你仍然不能在实际路径中找到它。我想知道将其放在路径中的“最佳、自然”的位置是哪里,但这似乎是个无望的事情。只需将其推到任何一个路径中即可。
  5. 在某个地方创建一个简单的cmake文件,并测试它是否有效。
[*] 它可能随着VS 2017一起提供,并且不要忘记VS 2017可能会被恼人地安装在其他软件(如Unity)中。

2

在使用TeamCity进行构建时,VS2017 Community 15.4.5与Windows Sdk版本10.0.16299.0存在类似问题,但在VS内部构建和在VS开发人员命令提示符下使用MSBuild构建时工作正常。因此,这并不完全回答OP的问题,但非常相似,这是第一个搜索结果,所以我将在此添加它。

找到了一个解决方案,它不需要以任何方式修改安装(没有链接/复制,因此错误率较低且易于自动化):

VisualStudioVersion环境变量设置为15.0

您可以使用标准的Windows gui全局执行此操作(例如,对于Windows 10,在此处),但我强烈建议不要这样做,因为它可能会干扰其他版本的VS,而且它不是一项容易自动化或检查到您的构建代码中的更改,因此在不同机器上更难复制。更好的选择是在运行构建的命令行中设置此选项(cmd:set VisualStudioVersion=15.0 PS:$env:VisualStudioVersion = '15.0' 在TeamCity中:添加env.VisualStudioVersion参数)。另一种选择是将此目录作为属性传递给MSBuild(传递/p:VisualStudioVersion=15.0或在TeamCity中添加system.VisualStudioVersion)。


那么你如何更改该变量?有任何指示吗? - Ivan Bilan

2

我通过指定CMAKE_SYSTEM_VERSION=8.1解决了我的问题。


不幸的是,在我们的情况下,这并没有解决问题。 - Fattie

1

我曾经遇到过完全相同的问题。有多个Visual Studio版本,包括2015和2017。 我的解决方案是从2017开发者命令提示符中运行cmake命令,并使用以下指令指定2015 Visual Studio版本:

cmake -G "Visual Studio 14 2015" ..


1
似乎当你安装更新版本的Visual Studio时,默认会选择更近期的SDK。你必须选择与VS2015一起安装的SDK(8.1)。
%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" <arch> 8.1

我找到了正确的答案这里

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