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

Posted

技术标签:

【中文标题】rc.exe 不再在 VS 2015 命令提示符中找到【英文标题】:rc.exe no longer found in VS 2015 Command Prompt 【发布时间】:2017-10-06 10:47:52 【问题描述】:

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

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

问题

CMake(版本 3.8.1)在“VS2015 x64 本机命令提示符”内运行时不再找到 C/C++ 编译器(在 VS 2017 命令提示符内运行时它确实正常工作) .

复制

CMakeLists.txt的内容:

project (test)
add_executable (test test.cpp)

test.cpp的内容无关。)

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

> 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 命令提示符中找到的:

> 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环境变量的内容:

在 VS 2013 命令提示符中,PATH 包含

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

在 VS 2017 命令提示符中,PATH 包含

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

但在 VS 2015 命令提示符内,PATH 仅包含

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

其中不包含rc.exe

问题

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

    Windows 10 Creators Update 可能在系统中安装、卸载或更改哪些内容(可能与 Windows SDK 相关)会触发此问题?

    有什么干净的方法可以解决这个问题?

编辑:已安装 VS 2017 组件:

【问题讨论】:

我刚刚遇到了与您几乎相同的操作系统和 Visual Studio 设置相同的问题。我正在尝试构建 Wireshark (64-bit).bl 奇怪的是我已经在家里的两台机器上构建了它而没有遇到这个问题。现在尝试在我的工作机器上构建,我遇到了问题。我手动将 C:\Program Files (x86)\Windows Kits\10\bin\x64 C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64 添加到 PATH 中,但这导致找不到“winver.h”。 你用的是什么版本的VS2015?在运行 VS2015 Update 3 的家用计算机上,rc.exe 位于 C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.EXE 中的路径上。 @DaveCleland 我正在运行 Visual Studio Entreprise 2015 版本 14.0.25425.01 更新 3。 五百赏金 展示此问题的一个基本途径:(1)购买一台新的干净的 Windows10 机器(2018 年末)。 (2) 安装VS2017。 (3)改变主意,卸载(不知何故)VS2017并安装VS2015。 这似乎从根本上导致了“windows cmake 危机”的表现。 【参考方案1】:

花了一些时间在安装了 Win10 Creators Edition 和 VS2010、VS2013、VS2015 和 VS2017 的三台机器上查看这个问题,它在两台机器上工作,在第三台机器上失败。所有人都安装了 VS2015 Update 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 应该在的地方。然而,在我失败的机器上 rc.exe 从这里丢失,但它确实存在于

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

我回去感觉这是一个设置问题,我重新运行了 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

上运行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,但它不是由以前的安装设置的。

【讨论】:

太棒了,感谢您的详细调查。很多人都受到这个问题的困扰,但据我所知,在任何地方都没有提供干净的解决方案。你的是第一个干净的解决方案。谢谢! 有效,只需在 PATH 变量中使用 rc.exe 添加到 /bin 的路径即可使用 虽然 vcvars64(或 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 下的 vcvarsall x64)添加了所需的路径,并且重新安装将 exe 放入该路径,但所有这些仅适用用于开发人员的命令行; VS2015 IDE 仍然找不到 rc.exe 并吐出相同的错误。因此,我们不妨将指向 rc.exe 的路径添加到 PATH 环境变量中,无论它在哪里,我们都设置好了。但我仍然要感谢这个答案,因为至少它让我知道 rc.exe 在哪里。 感谢@DaveCleland 十亿。一个细节,无论如何现在(2018 年末),它似乎为您提供了三个版本的 SDK 来安装。 我完全坚持使用 10.0.10011.16384,它似乎这是让它工作的唯一方法 我发现了另一种适用于任何 Windows 10 SDK 的解决方案,它不涉及将一些不确定的 RC.EXE 的副本放入路径中。我在这里写了一个类似的问题:***.com/a/69684610/158024.【参考方案2】:

绝对不只是你。我昨天安装了 VS2017,这样做似乎对我产生了同样的问题。我没有好的解决方案(这应该作为错误报告给 Microsoft),但我确实有一个 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

这为我解决了这个问题。我的预感是它是一个被覆盖的注册表项,但我还没有深入研究它来确定。

【讨论】:

谢谢。你确定你指的是C:\Program Files (x86)\Windows Kits\10\bin\x86,而不是C:\Program Files (x86)\Windows Kits\10\bin\x64 奇怪的是,在我的机器上,是的。看起来很奇怪,但我的 bin\x64 不包含 rc.exe 或 rc.dll。 YMMV。 谢谢。 @FrançoisBeaune 将文件复制到 x64 对我没有任何帮助,但 x86 效果很好。 在我的机器上叫做 rcdll.dll。我还需要复制 mt.exe。尽管如此,它仍然有效(复制 x86->x86 和 x64->x64)【参考方案3】:

在 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"

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

附: mklinkCMD 命令,在PowerShell 下不可用

【讨论】:

【参考方案4】:

由于某种原因,内置 Tools (1.4.1) 和 Windows 10 SDK (10.0.14393) 安装程序对我不起作用:

    C:\Program Files (x86)\Windows Kits\10\bin\x86 在安装过程中被填充(成功!) ...然后人口减少(悲伤!) 最终安装程序返回错误-2147023293/0x80048646

Windows SDK and emulator archive 中的 "Windows 10 SDK (ver. 10.0.14393.795)" installer 有效:C:\Program Files (x86)\Windows Kits\10\bin\x86 获取并保持填充状态,包括 rc.exe

Windows 7 x64,Visual Studio Professional 2015 更新 3。

【讨论】:

【参考方案5】:

指定CMAKE_SYSTEM_VERSION=8.1 为我解决了这个问题。

【讨论】:

不幸的是,这并没有解决我们的问题。【参考方案6】:

VS2017 Community 15.4.5 与 Windows Sdk 版本 10.0.16299.0 的类似问题,但仅适用于通过 TeamCity 构建;从 VS 内部构建工作正常,从 VS 开发人员命令提示符启动时使用 MSBuild 构建也是如此。所以这并不能完全回答 OP 的问题,但非常相似,这是第一个搜索匹配项之一,所以我将在此处添加。

找到了一个不需要需要以任何方式修改安装的解决方案(无需链接/复制,因此不易出错且易于自动化):

VisualStudioVersion 环境变量设置为15.0

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

【讨论】:

你如何改变这个变量?有什么指示吗?【参考方案7】:
    运行您的在线安装程序 vs_community2017.exe。 选择修改你的VS2017 选择使用 C++ 进行桌面开发 选择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,并覆盖旧版本。

【讨论】:

【参考方案8】:

对于任何陷入此困境的人,一个特殊的问题集是:

    获得新的 Windows 10 电脑 安装 VS 2017 [*] 卸载 VS 2017 和 安装VS 2015

如果你做到以上,

整个 Windows/VS 安装程序套件似乎存在错误或其他行为。

基本上似乎 MSFT 必须解决四个问题 (a) 有时它只是不安装 rc.exe,(b) 如果你“只”要求 c++ 的东西,它不会安装 rc.exe,你必须要求一切 (c) 卸载-安装管道似乎都以各种方式搞砸了 (d) 即使它为你随机安装 rc.exe,它也会忘记或弄乱路径。

:/

冗长乏味的短故事,解决方案似乎包括一个或多个

    基本安装或重新安装10.0.10011.16384 (但只有那个,不是后面的两个) 环顾四周,看看 rc.exe 是否简单、直接、不存在。如果是这样,请安装它(某处、任何地方) 在 VS 中,你会认为你可以“只”安装 c++ 的东西,但不能。在实践中,您必须检查所有网络,等等等等开发内容。这似乎给了你获得 rc.exe 的“更多希望”。完成此操作后,请重新访问第 2 点,因为您可能还没有。 在执行 2 然后 3 并且可能再次执行 2 之后,您可能仍然不会在实际路径中使用它。我很想知道在你的道路上哪个是“最好、最自然”的地方,但这似乎是一个失败的原因。把它推到你的路上,任何地方。 在某处创建一个简单的 cmake 文件 - 并对其进行测试。

。 . . . . .

[*] 它很可能随 VS 2017 一起提供,别忘了 VS 2017 可能会烦人地安装其他东西,Unity 等。

【讨论】:

【参考方案9】:

以管理员模式在文本编辑器中打开“C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat”并更改 这条线

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%PATH%

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%WindowsSdkDir%bin\%WindowsSDKVersion%x86;%PATH%

【讨论】:

【参考方案10】:

我遇到了完全相同的问题。多个 Visual Studio 版本,包括 2015 和 2017。 我的解决方案是从 2017 开发人员命令提示符运行 cmake 命令,并指定 2015 Visual Studio 版本:

cmake -G "Visual Studio 14 2015" ..

【讨论】:

【参考方案11】:

似乎当您安装较新版本的 Visual Studio 时,默认情况下会选择较新的 SDK。

必须选择随VS2015安装的SDK(8.1):

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" <arch> 8.1

我找到了正确答案here

【讨论】:

【参考方案12】:

在原生 64/86 Visual Studio 命令提示符下执行以下命令为 vs2015 设置正确的版本 -- %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 8.1 %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 8.1

在本机 64/86 Visual Studio 命令提示符下执行以下命令,为 vs2013 设置正确的版本 - %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64 7.1 %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86 7.1

这将设置正确的路径并毫无问题地执行。 我已经在安装了VS2013、VS2015、VS2017的WIN10上测试过。

【讨论】:

以上是关于rc.exe 不再在 VS 2015 命令提示符中找到的主要内容,如果未能解决你的问题,请参考以下文章

[环境配置][原创]qt5.14在vs2017编译器运行提示无法运行rc.exe

用vs2010编译fortran程序时出现rc.exe not found

windows10 vs2015 怎么配置cl.exe环境变量

vs2017怎么恢复默认设置,为什么在工具里没有命令提示呀

quazip:Windows ming32w-make 错误

vs2015 添加命令提示工具