在VS 2015命令提示符中找不到rc.exe

Fra*_*une 68 c++ windows cmake windows-10 visual-studio-2017

我刚刚安装了Windows 10 Creators Update(版本10.0.15063).

我安装了多个版本的Visual Studio(2012年,2013年,2015年和2017年).我几周前才安装了VS 2017.

问题

在"VS2015 x64本机命令提示符"中运行时,CMake(版本3.8.1)不再找到C/C++编译器(在VS 2017命令提示符下运行时它可以正常工作).

再生产

内容CMakeLists.txt:

project (test)
add_executable (test test.cpp)
Run Code Online (Sandbox Code Playgroud)

(内容test.cpp无关紧要.)

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

> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..
Run Code Online (Sandbox Code Playgroud)

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".
Run Code Online (Sandbox Code Playgroud)

分析

在查看时,失败的原因很明显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]
Run Code Online (Sandbox Code Playgroud)

rc.exe找不到(资源编译器).实际上,在相同的VS 2015命令提示符中:

> where rc.exe
INFO: Could not find files for the given pattern(s).
Run Code Online (Sandbox Code Playgroud)

虽然它在VS 2013命令提示符发现:

> 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
Run Code Online (Sandbox Code Playgroud)

和VS 2017命令提示符:

> where rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
Run Code Online (Sandbox Code Playgroud)

PATH在各种VS命令提示中检查环境变量的内容:

问题

  1. 这是一个已知问题还是特定于我的系统?

  2. Windows 10 Creators Update可能会在系统中安装,卸载或更改(可能是与Windows SDK相关的东西)会触发此问题?

  3. 什么是解决这个问题的干净方法?

编辑:安装VS 2017组件:

VS 2017组件安装

小智 92

花了一些时间在安装了Win10 Creators Edition和VS2010,VS2013,VS2015和VS2017的三台机器上看这个,它在两台机器上运行,在第三台机器上运行失败.所有都有VS2015 Update 3,所有应该都安装了相同的选项.

运行以下批处理文件

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat
Run Code Online (Sandbox Code Playgroud)

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

C:\Program Files (x86)\Windows Kits\10\bin\x64
Run Code Online (Sandbox Code Playgroud)

到了PATH.这是rc.exe 应该在的地方.但是在我失败的机器上,rc.exe从这里丢失了,但确实存在

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
Run Code Online (Sandbox Code Playgroud)

我回去后觉得这是一个设置问题我重新运行VS2015 Update 3设置并告诉它添加

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

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

C:\Program Files (x86)\Windows Kits\10\bin\x64
Run Code Online (Sandbox Code Playgroud)

运行rc -v on

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
Run Code Online (Sandbox Code Playgroud)

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
Run Code Online (Sandbox Code Playgroud)

给出了相同的版本号10.0.10011.16384

不确定为什么原始安装中缺少rc.exe,但重新运行安装并添加其他SDK为我修复了它.看起来像

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
Run Code Online (Sandbox Code Playgroud)

应该是默认的rc.exe,但它不是由以前的安装设置的.

  • 太好了,谢谢您的详细调查。许多人都遭受这个问题的困扰,但据我所知,直到那时,任何地方都没有提供干净的解决方案。您的是第一个干净的解决方案。谢谢! (3认同)
  • 尽管 vcvars64(或 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 下的 `vcvarsall x64`)添加了所需的路径,并且重新安装会将 exe 放入该路径,但所有这些仅适用于开发人员的命令行;VS2015 IDE 仍然找不到 rc.exe 并吐出同样的错误。所以我们不妨把指向rc.exe的路径,不管它在什么地方,加入PATH环境变量中,我们就都设置好了。但我仍然要感谢这个答案,因为至少它让我知道 rc.exe 在哪里。 (2认同)
  • 感谢这个@DaveCleland 的十亿。一个细节,现在无论如何(2018 年末)它似乎为您提供了三个版本的 SDK 来安装。**我只坚持使用 10.0.10011.16384** **似乎这是让它工作的唯一方法**。 (2认同)

Fal*_*con 15

绝对不仅仅是你.我昨天安装了VS2017,这样做似乎也产生了同样的问题.我没有一个好的解决方案(这应该作为一个bug报告给微软)但我确实有一个hacky解决方法.

我能够从中复制rc.exe和rc.dll

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64 
to
C:\Program Files (x86)\Windows Kits\10\bin\x86
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.我的预感是,它是一个被覆盖的注册表密钥,但我还没有充分挖掘它以确定.


小智 5

遇到与Windows 10 15063.608(Windows SDK 10.0.15063.0)相同的问题.为我工作的解决方案是为Windows 10工具包二进制文件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"
Run Code Online (Sandbox Code Playgroud)

(在运行这些命令之前,只需重命名现有文件夹Windows Kits\10\bin\x64Windows Kits\10\bin\x86文件夹 - 看起来它们没有被使用.