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 -vC:\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.dllC:\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\x64
和 Windows Kits\10\bin\x86
文件夹 - 看起来它们没有被使用。
附: mklink
是CMD
命令,在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环境变量