LINK : fatal error LNK1158: cannot run 'rc.exe'

目录

问题

软件环境:Windows 10 Pro + Visual Studio 2015 然后安装了 Windows 10 SDK
Windows 10 SDK 是用这个 ISO 文件安装的:17134.12.180419-0858.rs4_release_svc_prod2_WindowsSDK.iso

在 Visual C++ 工程中,我将 Target platform 从 8.1 切换到 10.0.17134.0:
LINK : fatal error LNK1158: cannot run 'rc.exe'

然后就发现原本编译正常的 C++ 工程现在编译出错了。在 link 的时候,出现以下错误:

1>—— Build started: Project: PHM-Hnode-Std-GuiLauncher,
Configuration: Debug x64 —— 1> MainFrameBaseClass.cpp 1>
MainFrame.cpp 1> main.cpp 1> Generating Code… 1>LINK : fatal error
LNK1158: cannot run ‘rc.exe’
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

调查

由于以前在 Target Platform Version 设置为 8.1 的时候编译是正常的,所以我猜想,是不是这个 rc.exe 在 8.1 版本的 SDK 中存在,但在 10.0.17134.0 版本的 SDK 中被遗漏了。

果然在 8.1 版本的 SDK 中发现了 rc.exe,与此同时还看到了一个 rcdll.dll。

目录:

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

LINK : fatal error LNK1158: cannot run 'rc.exe'

Windows 10 SDK 的目录结构和 Windows 8.1 SDK 的目录结构有所不同:
LINK : fatal error LNK1158: cannot run 'rc.exe'

在 10.0.17134.0 的目录下发现 rc.exe 和 rcdll.dll 是存在的:
LINK : fatal error LNK1158: cannot run 'rc.exe'

所以说,rc.exe 和 rcdll.dll 文件并不缺失,只是编译的时候连接器没有找到它们。

解决

我也不知道如何让链接器找到这两个文件,且找到正确的版本。所以我把

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

这个目录下的 rc.exe 和 rcdll.dll 拷贝到我的 Visual C++ 的 VC/Bin 目录下:

D:\Apps\x86\Microsoft\Visual_Studio\v14.0\VC\bin

注意我的 Visual C++ 的安装目录可能和你的不同,你需要用你自己的的 VC/Bin 目录。

然后再编译程序,错误解决了:

1>—— Rebuild All started: Project: PHM-Hnode-Std-GuiLauncher,
Configuration: Debug x64 —— 1> MainFrameBaseClass.cpp 1>
MainFrame.cpp 1> main.cpp 1> Generating Code… 1>
PHM-Hnode-Std-GuiLauncher.vcxproj ->
D:\DevSpace\Gitpub\phm-prototype-180601\Dev\Build\MSVC_2015\Win32\Output\x64\Debug\PHM-Hnode-Std-GuiLauncher.exe
1> PHM-Hnode-Std-GuiLauncher.vcxproj ->
D:\DevSpace\Gitpub\phm-prototype-180601\Dev\Build\MSVC_2015\Win32\Output\x64\Debug\PHM-Hnode-Std-GuiLauncher.pdb
(Partial PDB)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========