148

我在网上搜索并找不到与我的问题相似的任何内容。

我创建了一个空的 C++ 项目并添加了一个带有返回的 main.cpp,但我无法构建它。这是我收到的消息:

1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1158: cannot run 'rc.exe'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

VS2012中是否有可以指定在哪里找到这个可执行文件的地方?我已经安装了 Windows 7 SDK,并且我有这个可执行文件:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin

我来自 Code::Blocks 并毫无问题地使用 mingw-gcc,但最近我一直需要 VS 来进行托管实现,所以我希望有人有想法。

4

28 回答 28

272
于 2013-01-17T06:09:22.553 回答
65

We hit this issue with our CMake/Visual Studio 2015 builds after also installing VS2017 on the machine. The correct solution in our case is to specify the Window Kit version (8.1) to the Visual Studio Command Prompt - otherwise you get the Windows 10 Kit by default which doesn't include rc.exe in the bin directory.

e.g. Start Menu->Visual Studio 2015->VS2015 x64 Native Tools Command Prompt

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

Note the 8.1 option on the end

于 2017-09-12T01:39:38.753 回答
35

From what I have found, if you have a windows 7 OS, doing the following steps will fix the problem:

1) go to C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin

2) then copy RC.exe and RcDll from this file

3) go to C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin and paste the two files you have copied into it.

I had the same problem, and the above posted solution did not work. My solution was derived from it, and it worked for me, if the ones above do not work you can give this one a try.

于 2014-07-27T19:37:43.057 回答
18

This rc.exe error can occur if the Visual C++ compiler and the Windows 10 SDK versions don't correspond to the same Visual Studio year. In general, the solution is to make sure you have on your system, and are using in the compilation, VC++ and Windows SDK for the visual studio year you are using.

For instance, if you have Visual Studio 2017 or 2019, and you installed Build Tools 2015 without selecting to install its own 2015 Windows SDK (default installation does not install it!), and are trying to use it to compile, you may run into this problem.

In my case, I already had Visual Studio 2017. When I tried to use Build Tools 2015 to compile a python library (or probably any program), this same 'rc.exe' error occurred. I read that the VS2015 14.0 C++ compiler can glitch if it tries to use the Windows 10 SDK from Visual Studio 2017.

I uninstalled Build Tools 2015, and reinstalled it, this time as a custom installation, selecting to install both visual C++ and Windows 10 SDK components. This fixed the issue.

UPDATE: I just looked at Build Tools 2015 again, and apparently there is no custom installation option anymore. If so, installing Visual Studio 2015 with C++ and Windows SDK components should also work. Edit: commenter has found the customizable build tools installer

于 2017-10-11T04:20:54.827 回答
11

In my case, I had a mix and match error between projects created in VS2015 and VS2017. In my .vcxproj file, there's this section called PropertyGroup Label="Globals">. I had a section for TargetPlatformVersion=10.0.15063.0. When I removed the TargetPlatformVersion, that solved the problem.

Sorry I can't copy and paste the block here, but stackoverflows coding format did not allow that.

于 2017-06-19T14:56:37.970 回答
8

I'm on Windows 7 x64 and Visual Studio 2017. I get this error trying to compile a cython script. That's how I solved: I copied and pasted rc.exe and rcdll.dll from:

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

to

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64
于 2017-12-18T19:17:45.800 回答
8

In my case, VS 2019 on Windows 10 x64, I followed mostly what it was said in the answers but pasted rc.exe and rcdll.dll from C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86 to C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin, which is where link.exe is.

于 2020-08-04T23:17:55.767 回答
4

Here is my almost similar case:
I have VC2010 working project under Win7 32bit. I make clean install of VC2013 under Win8.1 64bit After successful converting of my project from VC2010 to VC2013, during 1st compilation the following error rise:
Finished generating code
LINK : fatal error LNK1158: cannot run 'rc.exe'

Solution 1:
Delete whole line “&lt;ExecutablePath Condition=”...”&gt;...</ExecutablePath>” in element “&lt;PropertyGroup>” in NameOfYourSolution.vcxproj file in notepad before to run VC2013
Solution 2:
Copy only two files: rc.exe and rcdll.dll from “c:\Program Files (x86)\Windows Kits\8.1\bin\x86\” to “c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\” and compilation will be successful!!
Note:
a)It is not need to touch any PATH or other Windows or VC environment variables.
b)“Platform Toolset” (Project Property Pages –> Configuration Properties –> General) will be automatic set to “Visual Studio 2013 (v120)” (not change it to “Visual Studio 2010” to be able to continue to develop your project under VC2013 concepts)

于 2014-07-20T10:47:14.813 回答
4

In my case the error was due to a bad setting in a vcxproj. The vcxproj was from a third party, so I'm not sure how it got in that state.

Specifically, for one of the platform/profile combos, the platform folder was missing from the Windows SDK bin folder:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 <ExecutablePath>$(VCInstallDir)bin\x86_amd64;$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir)bin\x86;

is correct, where

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 <ExecutablePath>$(VCInstallDir)bin\x86_amd64;$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir)bin;

was incorrect. Might need to scroll to the end of the code boxes to see the difference.

Note also, that for some strange reason $(WindowsSdkDir)bin\x64; did NOT work for me. Tried to figure out why, when rc.exe definitely exists in that folder, but I gave up.

In my opinion, the solutions from previous posters that involve copying rc.exe all over the place are wrong, because your project will not work on anyone else's machine. If you fix up the paths in the project correctly, it should work on any machine with a correct installation of the Windows SDK.

于 2015-06-17T01:37:34.440 回答
4

I'm on Windows 10 x64 and Visual Studio 2017. I copied and pasted rc.exe and rcdll.dll from:

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

to

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

it's works with: ( qt creator 5.7.1)

于 2018-04-13T02:06:23.353 回答
3

This might be a little outdated. But if copying the rc.exe and exdll.dll did not work, there is a chance that the windows sdk is not installed properly even if the windows sdk folder exists. You can update the sdk for win 8 in the following page: http://msdn.microsoft.com/en-US/windows/hardware/hh852363 After re-installing the sdk, the problem would get solved. Also make sure that platform toolset is set properly.

于 2013-09-02T03:22:34.303 回答
3

I've encountered this issue recently. I have both VS 2015 and VS 2017 installed, Windows kits 8.1 and 10 installed.

Command prompt from VS 2017 works as expected, rc.exe is visible. In VS 2015 this is not true. Actually, vcvarsall.bat script from VS 2015 does add a path to Windows 10 kit to PATH variable, but it adds a slightly wrong path. It adds path to

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

while the actual path is

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

It seems that updating Windows 10 kit (or installing VS 2017) led to this issue.

So the solution is simple: just create symbolic links in "C:\Program Files (x86)\Windows Kits\10\bin" folder pointing to the corresponding folders in the underlying folder, e.g. a symbolic link "x86" for folder "10.0.17763.0\x86", "x64" for "10.0.17763.0\x64" etc.

于 2019-03-28T05:36:11.970 回答
3

I'm on Windows 10 Pro x64, VS 19..

When trying to install mod_wsgi for apache in cmd.

C:\>python -m pip install mod_wsgi

This is the error I was getting from my command prompt.

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

error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158

I had to copy rc.exe & rcdll.dll from

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

and add it to

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64

result from cmd

C:\>python -m pip install mod_wsgi
Collecting mod_wsgi
Using cached mod_wsgi-4.7.1.tar.gz (498 kB)
Installing collected packages: mod-wsgi
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.7.1

Hope this helps someone.

于 2020-02-29T06:05:35.343 回答
2

I had the same problem on VS 2013 and was able to fix it by changing the Platform Toolset.

You can find it in project settings, general.

E.g. switching Platform Toolset to VS 2010 will cause VS to use the Windows\v7.0A SDK.

You can check which SDK path is used by adding this to your prebuild event:

echo using SDK $(WindowsSdkDir)
于 2013-10-30T13:53:32.770 回答
2

I'm using Windows 7 with VS 2013 (Update 3) and Intel Parallel Studio XE Composer Edition for Fortran Windows (Update 5). Out of the box I had the same issue.

Once I fixed the missing rc.exe problem I had another issue. The linker was missing kernel32.lib.

I corrected both issues by updating the Intel Composer Options (TOOLS->Options...->Intel Composer XE->Visual Fortran->Compilers).

For the Win32 tab I added:

Executables: C:\Program Files (x86)\Windows Kits\8.0\bin\x86; (just before $(PATH))

Libraries: C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86; (at the end)

For the x64 tab I added:

Executables: C:\Program Files (x86)\Windows Kits\8.0\bin\x64; (just before $(PATH))

Libraries: C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64; (at the end)

Update...

I was also missing some SDK header files (winver.h and winapifamily.h). I added the following to the same TOOLS->Options... area.

For both the win32 and x64 tabs

Includes: C:\Program Files (x86)\Windows Kits\8.0\Include\um;C:\Program Files (x86)\Windows Kits\8.0\Include\shared;

于 2015-05-08T20:20:04.290 回答
2

I just figured out one (out of the 3 in total) projects in my VS2010 (SDK7.1) solution (projects are linked in a sequential linear dependency chain), had a .rc file in the project files that was empty. Removing the empty .rc file (from the project, without deleting it) solved the "fatal error LNK1158: ... cvtres.exe" problem.

Update: The following copy fixed the problem:

xcopy "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\"

This will enable WinSDK7.1, via MSBuild, to be able to compile .rc files into the executables.

于 2015-05-31T22:15:43.337 回答
2

This is even easier than that with Visual Studio 2017. Follow these instructions: https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio to modify using Microsoft Visual Studio Installer.

Once inside the Microsoft Visual Studio Installer, click modify under your installed Visual Studio package, make sure the Desktop development with C++ is checked, and the MFC and ATl support (x86 and x64), under summary.

于 2018-01-17T20:24:05.317 回答
1

This can be caused by a vcxproj that originated in previous versions of Visual Studio OR changing the Platform Toolset in Configuration Properties -> General.

If so, possible Solution:

1) Go to Configuration Properties -> VC++ Directories

2) Select drop down for Executable Directories

3) Select "Inherit from parent or Project Defaults"

于 2017-09-27T16:49:16.813 回答
1

Add to your environment variable window sdk 8.1 path

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

then open Visual studio x64 Native tools command prompt and enter

vcvarsall.bat

于 2018-09-30T12:25:02.210 回答
1

If you really need to use the SDK Windows 10 with Visual Studio 2015, you have to download an older version on sdk-archive. Newer version of the SDK changed the place of the rc executable and MSBuild of Visual Studio 2015 update 3 (latest version) can't locate it. At least the version 10.0.14393.795 of the SDK Windows is still compatible with Visual Studio 2015.

于 2018-11-15T09:38:12.930 回答
1

Maybe project file was touched by VS2017. Then when you link the project in 2015 "LINK : fatal error LNK1158: cannot run 'rc.exe'" can brake the build.

In vcxproj try to:

1) replace:

<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> with: <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>

2) remove: <VCProjectVersion>15.0</VCProjectVersion>

3) replace: <PlatformToolset>v141</PlatformToolset> with: <PlatformToolset>v140</PlatformToolset>

于 2019-05-13T10:35:20.487 回答
1

I got the OP's link error about rc.exe when trying to execute pip install inside a bash task within an Azure DevOps pipeline that I was using to build a Python package from source with C++ extensions. I was able to resolve it by adding the path to rc.exe inside the bash task just before calling pip install, like so:

PATH="/c/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64":$PATH

That was inside an Azure job that was using vmImage: 'windows-2019' for its agent; i.e., Windows Server 2019 with Visual Studio 2019.

于 2019-11-28T14:01:54.847 回答
1

I was able to make it work for me also this way in windows

  1. Set your environment variable to point to the location of your rc.exe assuming you're using x86 version

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

You can easily set your environment variable using

C:> setx path "%path%;C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86"

  1. Restart your Qt Creator
  2. Clean and Rebuild
于 2020-01-21T01:26:29.787 回答
1

My answer to this quesiton.

Modify file C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsqueryregistry.bat The content of :GetWin10SdkDir From

@REM ---------------------------------------------------------------------------
:GetWin10SdkDir

@call :GetWin10SdkDirHelper HKLM\SOFTWARE\Wow6432Node > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKCU\SOFTWARE\Wow6432Node > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKLM\SOFTWARE > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKCU\SOFTWARE > nul 2>&1
@if errorlevel 1 exit /B 1
@exit /B 0

to

@REM ---------------------------------------------------------------------------
:GetWin10SdkDir

@call :GetWin10SdkDirHelper HKLM\SOFTWARE\Wow6432Node > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKCU\SOFTWARE\Wow6432Node > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKLM\SOFTWARE > nul 2>&1
@if errorlevel 1 call :GetWin10SdkDirHelper HKCU\SOFTWARE > nul 2>&1
@if errorlevel 1 exit /B 1
@setlocal enableDelayedExpansion
set HostArch=x86
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( set "HostArch=x64" )
if "%PROCESSOR_ARCHITECTURE%"=="EM64T" ( set "HostArch=x64" )
if "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( set "HostArch=arm64" )
if "%PROCESSOR_ARCHITECTURE%"=="arm" ( set "HostArch=arm" )
@endlocal & set PATH=%WindowsSdkDir%bin\%WindowsSDKVersion%%HostArch%;%PATH%
@exit /B 0

Modify this single place will enable the support for all Windows 10 sdk along with all build target of visual studio, including

  • VS2015 x64 ARM Cross Tools Command Prompt
  • VS2015 x64 Native Tools Command Prompt
  • VS2015 x64 x86 Cross Tools Command Prompt
  • VS2015 x86 ARM Cross Tools Command Prompt
  • VS2015 x86 Native Tools Command Prompt
  • VS2015 x86 x64 Cross Tools Command Prompt

They are all working.

于 2020-12-14T04:43:27.057 回答
0

In my case, I installed the Windows SDK 10586 via Visual Studio 2015 -> Modify, then the following paths are installed.

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

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

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

于 2019-03-25T08:56:14.607 回答
0

For Visual Studio Community 2019, copying the files in the answers above (rc.exe rcdll.dll) to C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\bin\Hostx86\x86 did the trick for me.

于 2019-06-09T08:40:22.927 回答
0

"Error LNK1158 cannot run 'rc.exe" could be resulted from your project was opened by newer MS VS version. For instance, your project was created in VS 2015, then later was opened by 2017. Then later your project is opened in 2015.

To resolve this issue, open yourProjectName.vcxproj, look for WindowsTargetPlatformVersion, and change to the correct VS version

For VS 2015, it should be 8.1 for VS 2017, it should be 10.0.17763.0

于 2020-08-04T15:45:38.150 回答
0

There are a lot of answers here, but I didn't see this one, which I believe is the right way to fix this Visual Studio bug. I recently had to install Visual Studio 2015 on a system that already had Visual Studio 2017 and 2019 along with multiple versions of the Windows SDK. When building either x86 or x64/debug or release, it could not find RC.EXE. The reason is that the Project's executable path (the $(VS_ExecutablePath)) value is incorrect. For x86 and x64, it's set to

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

which appears to be correct if 10 is replaced by 8.1 but I want to use the Windows 10 SDK not the Windows 8.1 SDK.

The Windows 10 SDK executables are actually in these directories (i.e. these are the SDKs I have installed right now):

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\arm64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\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
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\RC.Exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64\RC.Exe

In Windows 10 SDKs, the TargetPlatformVersion is part of the path, which allows the SDK executables/include/libs to be updated for each new TargetPlatform as it's released.

Choosing an RC.EXE and copying it to a directory in the path would work but each TargetPlatformVersion SDK directory has a different RC.EXE, so you might not know which one you are using -- especially if you have multiple developers and build machines. It's best to fix it in the projects.

To fix this,

  • Select all of the affected projects with Shift-Click
  • Right-click a selected project and select Properties,
  • Select VC++ Directories on the left
  • Select Executable Directories
  • Click the pull-down at the far right and select Edit.

Double-click the top blank line and for x86/win32 projects, add this to both Debug and Release configurations:

  $(WindowsSdkDir)bin\$(TargetPlatformVersion)\x86\

For x64 projects, add this to both Debug and Release configurations:

  $(WindowsSdkDir)bin\$(TargetPlatformVersion)\x64\

Leave "Inherit from parent or project defaults" checked. The "Evaluated Value" window may appear garbled but it seems to get fixed once you save and close the property pages.

I did not have to update "Library Directories" nor "Include Directories" but they might require similar changes.

This will make a number of entries in each Visual Studio project file that look like this:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ExecutablePath>$(WindowsSdkDir_10)bin\$(TargetPlatformVersion)\x86\;$(ExecutablePath)</ExecutablePath>
  </PropertyGroup>    

The right way to fix this is by editing the property sheet for Microsoft.Cpp.Win32.user or to define your own property sheet to add this value to the inherited values, but the Visual Studio 2015 property manager seems to be buggy (2017/2019 is much better) so I found it best to just put the value directly into the projects. This also means every other developer or build machine that uses these projects will be able to build, as long as the chosen Windows 10 SDK is installed.

于 2021-10-23T02:16:55.000 回答