rc.exe wurde in der VS 2015-Eingabeaufforderung nicht mehr gefunden

74

Ich habe gerade Windows 10 Creators Update (Version 10.0.15063) installiert.

Ich habe mehrere Versionen von Visual Studio installiert (2012, 2013, 2015 und 2017). Ich habe VS 2017 erst vor ein paar Wochen installiert.

Problem

CMake (Version 3.8.1) nicht mehr findet die C / C ++ Compiler , wenn in einem "VS2015 x64 Native Command Prompt" (es laufen tut richtig funktioniert , wenn in einer VS 2017 Eingabeaufforderung).

Reproduktion

Inhalt von CMakeLists.txt:

project (test)
add_executable (test test.cpp)

(Inhalt von test.cppist irrelevant.)

CMake-Aufruf in einer nativen VS2015 x64-Eingabeaufforderung:

> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..

CMake-Ausgabe:

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

Analyse

Der Grund für den Fehler ist klar, wenn man Folgendes betrachtet 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(Resource Compiler) wurde nicht gefunden. In der gleichen VS 2015-Eingabeaufforderung:

> where rc.exe
INFO: Could not find files for the given pattern(s).

Während es sich in einer VS 2013 Eingabeaufforderung gefunden:

> 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

und eine VS 2017-Eingabeaufforderung:

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

Überprüfen des Inhalts der PATHUmgebungsvariablen in verschiedenen VS-Befehlsansagen:

  • PATHEnthält in einer VS 2013-Eingabeaufforderung

    C:\Program Files (x86)\Windows Kits\8.1\bin\x64
    
  • PATHEnthält in einer VS 2017-Eingabeaufforderung

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
    
  • PATHEnthält jedoch in einer VS 2015-Eingabeaufforderung nur

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

    was nicht enthält rc.exe.

Fragen

  1. Ist dies ein bekanntes Problem oder ist es spezifisch für mein System?

  2. Was könnte Windows 10 Creators Update möglicherweise im System installieren, deinstallieren oder ändern (möglicherweise etwas im Zusammenhang mit Windows SDKs), das dieses Problem auslösen würde?

  3. Was ist ein sauberer Weg, um dies zu lösen?

Bearbeiten: Installierte VS 2017-Komponenten:

VS 2017-Komponenten installiert

François Beaune
quelle
Ich habe gerade das gleiche Problem mit fast identischen Betriebssystem- und Visual Studio-Setups wie Sie. Ich versuche, Wireshark (64-Bit) zu erstellen. Bl Seltsamerweise habe ich es zu Hause auf zwei Computern erstellt, ohne dieses Problem zu lösen. Jetzt versuche ich auf meiner Arbeitsmaschine aufzubauen und bin auf das Problem gestoßen. Ich habe C: \ Programme (x86) \ Windows Kits \ 10 \ bin \ x64 C: \ Programme (x86) \ Windows Kits \ 10 \ bin \ 10.0.15063.0 \ x64 manuell zum Pfad hinzugefügt, aber dies führte dann zu 'winver.h' wird nicht gefunden.
DaveCleland
1
Welche Aktualisierungsstufe von VS2015 verwenden Sie? Auf meinem Heimcomputer, auf dem VS2015 Update 3 ausgeführt wird, befindet sich rc.exe auf dem Pfad in C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.EXE.
DaveCleland
@ DaveCleland Ich verwende Visual Studio Entreprise 2015 Version 14.0.25425.01 Update 3.
François Beaune
FÜNFHUNDERT BOUNTY
Fattie
Ein grundlegender Weg, um dieses Problem aufzuzeigen: (1) Kaufen Sie einen neuen sauberen Windows10-Computer (Ende 2018). (2) Installieren Sie VS2017. (3) Ändern Sie Ihre Meinung, deinstallieren Sie (irgendwie) VS2017 und installieren Sie VS2015. Dies scheint grundsätzlich dazu zu führen, dass sich die „Windows cmake-Krise“ zeigt.
Fattie

Antworten:

100

Ich habe einige Zeit damit verbracht, dies auf drei Computern mit Win10 Creators Edition und VS2010, VS2013, VS2015 und VS2017 zu untersuchen, wo es auf zwei Computern funktioniert und auf dem dritten fehlschlägt. Alle hatten VS2015 Update 3 und alle sollten mit den gleichen Optionen installiert worden sein.

Ausführen der folgenden Batchdatei

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

sollte die richtige Umgebung für die VS2015 x64-Umgebung einrichten. Dies sollte hinzufügen

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

zum Pfad. Hier sollte rc.exe sein. Auf meinem fehlerhaften Computer fehlte jedoch rc.exe hier, aber es existierte in

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

Ich ging zurück und hatte das Gefühl, dass dies ein Setup-Problem war. Ich führte das VS2015 Update 3-Setup erneut aus und forderte es auf, es hinzuzufügen

Windows- und Webentwicklung -> Universelle Windows App-Entwicklungstools -> Tools (1.4.1) und Windows 10 SDK (10.0.14393)

Dies führte dazu, dass rc.exe und verwandte Dateien in angezeigt wurden

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

Laufende rc -v auf

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

und

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

gab die gleiche Versionsnummer 10.0.10011.16384

Ich bin mir nicht sicher, warum rc.exe in der ursprünglichen Installation fehlte, aber durch erneutes Ausführen der Installation und Hinzufügen des anderen SDK wurde das Problem für mich behoben. Es sieht aus wie

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

sollte die Standard- rc.exe sein , wurde aber nicht durch eine vorherige Installation eingerichtet.

DaveCleland
quelle
4
Super, danke für die detaillierte Untersuchung. Viele Menschen leiden unter diesem Problem, aber soweit ich das beurteilen kann, wurde bis dahin nirgendwo eine saubere Lösung angeboten. Ihre ist die erste saubere Lösung. Vielen Dank!
François Beaune
1
Funktioniert, hatte gerade den Pfad zum / bin mit rc.exe in den PATH-Variablen hinzugefügt, damit es funktioniert
ivan_bilan
1
Obwohl vcvars64 (oder vcvarsall x64unter C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC) den gewünschten Pfad hinzufügt und die Neuinstallation die Exe in diesen Pfad einfügt, funktioniert all dies nur für die Befehlszeile des Entwicklers. Die VS2015-IDE kann rc.exe immer noch nicht finden und denselben Fehler ausspucken. Wir können also genauso gut den Pfad, der auf die rc.exe zeigt, unabhängig davon, wo sie sich befindet, in die Umgebungsvariable PATH einfügen, und wir sind alle festgelegt. Aber ich möchte mich trotzdem bei dieser Antwort bedanken, denn zumindest weiß ich, wo sich rc.exe befindet.
user5280911
1
Vielen Dank eine Milliarde für dieses @ DaveCleland. Ein Detail, für den Moment (Ende 2018) scheint es Ihnen drei Versionen des SDK zur Installation anzubieten. Ich habe mich genau und nur an 10.0.10011.16384 gehalten und es scheint, dass dies der einzige Weg ist, dies zum Laufen zu bringen .
Fattie
17

Es ist definitiv nicht nur du. Ich habe gestern VS2017 installiert und dies scheint auf meiner Seite das gleiche Problem verursacht zu haben. Ich habe keine gute Lösung (dies sollte Microsoft als Fehler gemeldet werden), aber ich habe eine hackige Problemumgehung.

Ich konnte rc.exe und rc.dll von kopieren

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

Das hat das Problem für mich gelöst. Meine Vermutung ist, dass ein Registrierungsschlüssel überschrieben wird, aber ich habe mich nicht genug damit beschäftigt, um sicherzugehen.

Falke
quelle
1
Vielen Dank. Bist du sicher C:\Program Files (x86)\Windows Kits\10\bin\x86, dass du es gemeint hast und nicht C:\Program Files (x86)\Windows Kits\10\bin\x64?
François Beaune
Seltsamerweise auf meiner Maschine, ja. Es schien seltsam, aber mein bin \ x64 enthält weder rc.exe noch rc.dll. YMMV.
Falcon
Vielen Dank. @ FrançoisBeaune Das Kopieren der Dateien in x64 hat nichts für mich getan, aber x86 hat großartig funktioniert.
TinyRacoon
7

Das gleiche Problem wurde mit Windows 10 15063.608 (Windows SDK 10.0.15063.0) festgestellt. Die Lösung, die für mich funktioniert, ist die Erstellung von Hardlinks für Windows 10-Kit-Binärdateien x64- und x86-Ordner wie unten gezeigt (verwenden Sie die Eingabeaufforderung mit Administratorrechten):

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"

(Bevor Sie diese Befehle ausführen, benennen Sie einfach vorhandene Windows Kits\10\bin\x64und Windows Kits\10\bin\x86Ordner um - es sieht so aus, als würden sie nicht verwendet.

PS mklinkist ein CMDBefehl, der unter nicht verfügbar istPowerShell

Victoria Zhislina
quelle
4

Aus irgendeinem Grund funktionierte das integrierte Installationsprogramm für Tools (1.4.1) und Windows 10 SDK (10.0.14393) bei mir nicht:

  1. C:\Program Files (x86)\Windows Kits\10\bin\x86 wurde während der Installation gefüllt (Erfolg!)
  2. ... dann entvölkert (Trauer!)
  3. Und schließlich gab das Installationsprogramm den Fehler -2147023293/ zurück 0x80048646.

Das Installationsprogramm "Windows 10 SDK (Version 10.0.14393.795)" aus dem Windows SDK- und Emulator-Archiv hat jedoch funktioniert: C:\Program Files (x86)\Windows Kits\10\bin\x86wird und bleibt gefüllt, einschließlich rc.exe.

Windows 7 x64, Visual Studio Professional 2015 Update 3.

genpfault
quelle
2

Die Angabe CMAKE_SYSTEM_VERSION=8.1löste das Problem für mich.

Lars Bilke
quelle
Leider hat dies in unserem Fall nicht behoben.
Fattie
2

Ähnliches Problem mit VS2017 Community 15.4.5 mit Windows Sdk Version 10.0.16299.0, jedoch nur für Builds über TeamCity. Builds aus VS heraus funktionieren einwandfrei, ebenso wie das Erstellen mit MSBuild, wenn Sie von einer VS-Entwickler-Eingabeaufforderung aus starten. Dies beantwortet also nicht genau die Frage des OP, ist aber so ähnlich und dies ist eines der ersten Suchmatches, also werde ich es hier hinzufügen.

Eine Lösung gefunden , die sich nicht erfordern die Installation in irgendeiner Weise zu modifizieren (keine Verknüpfung / Kopieren so weniger fehleranfällig und leicht automatisierbar):

Setzen Sie die VisualStudioVersionUmgebungsvariable auf 15.0.

Sie können dies global mit der Standard-Windows-Benutzeroberfläche tun (Beispiel für Windows 10 hier ), aber ich würde dringend davon abraten, da dies andere Versionen von VS beeinträchtigen könnte. Außerdem handelt es sich nicht um eine Änderung, die leicht automatisiert oder überprüft werden kann in Ihren Build-Code und daher schwieriger zu reproduzieren omn verschiedenen Maschinen. Eine bessere Alternative besteht darin, dies in der Befehlszeile festzulegen, in der der Build ausgeführt wird (cmd: set VisualStudioVersion=15.0PS: $env:VisualStudioVersion = '15.0'in TeamCity: env.VisualStudioVersionParameter hinzufügen ). Eine andere Alternative besteht darin, dieses Verzeichnis als Eigenschaft an MSBuild zu übergeben (übergeben /p:VisualStudioVersion=15.0oder in teamCity hinzufügen system.VisualStudioVersion).

stijn
quelle
und wie ändert man diese Variable? irgendwelche Anweisungen?
ivan_bilan
2
  1. Führen Sie Ihr Online-Installationsprogramm vs_community2017.exe aus.
  2. Wählen Sie Ändern Ihres VS2017
  3. Wählen Sie die Desktop-Entwicklung mit C ++
  4. Wählen Sie Windows 10 SDK (meine Version ist 10.0.10586) und installieren Sie es

Führen Sie die VS2015-Eingabeaufforderung aus:

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

Es scheint, dass vs2017 standardmäßig das neueste SDK installiert und alte Versionen überschreibt.

yezhiyun
quelle
2

Für jeden, der daran hängen bleibt, ist ein besonderes Problem:

  1. Holen Sie sich einen neuen Windows 10 PC
  2. installiere VS 2017 [*]
  3. deinstallieren Sie VS 2017 und
  4. Installieren Sie VS 2015

Wenn Sie das oben genannte tun,

Es scheint, dass es einen Fehler oder ein anderes Verhalten mit der gesamten Suite von Windows / VS-Installationsprogrammen gibt.

Grundsätzlich scheint es vier Probleme zu geben, die MSFT beheben muss. (A) Manchmal wird rc.exe einfach nicht installiert. (B) rc.exe wird nicht installiert, wenn Sie "nur" nach dem C ++ - Zeug fragen, müssen Sie fragen für alles (c) scheint die Deinstallations-Installations-Pipeline auf verschiedene Weise durcheinander zu sein (d), selbst wenn sie rc.exe zufällig für Sie installiert, vergisst sie den Pfad oder verschmutzt ihn.

: /

Kurz gesagt, Lösungen scheinen eine oder mehrere von ihnen zu umfassen

  1. Grundsätzlich 10.0.10011.16384 installieren oder neu installieren (aber nur das eine, NICHT die beiden späteren)
  2. Schauen Sie sich um und sehen Sie, ob rc.exe einfach ist, nicht da . Wenn ja, installieren Sie es (irgendwo, überall)
  3. In VS würden Sie denken, Sie können "nur" das C ++ - Zeug installieren, aber nein . In der Praxis MÜSSEN Sie das gesamte Web mit Ja überprüfen, bla bla Entwicklungsmaterial. Dies scheint Ihnen "mehr Hoffnung" zu geben, rc.exe zu bekommen. Wiederholen Sie danach Punkt 2, da Sie ihn möglicherweise noch nicht haben.
  4. Nachdem Sie 2, dann 3 und wahrscheinlich 2 erneut ausgeführt haben, werden Sie es wahrscheinlich NOCH nicht auf Ihrem tatsächlichen Pfad haben. Ich würde gerne wissen, welcher der "beste, natürlichste" Ort ist, um ihn auf Ihrem Weg zu haben, aber das scheint eine verlorene Sache zu sein. Schieben Sie es einfach irgendwo in Ihren Weg.
  5. Erstellen Sie irgendwo eine einfache cmake-Datei - und testen Sie, ob sie funktioniert.

. . . . . .

[*] Es kann durchaus mit VS 2017 kommen, und vergessen Sie nicht, dass VS 2017 möglicherweise mit etwas anderem, Unity usw. installiert wird.

Fattie
quelle
1

Öffnen Sie "C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ VsDevCmd.bat" in einem Texteditor im Administratormodus und ändern Sie die Zeile

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

zu

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

N3UR0CHR0M
quelle
1

Ich hatte genau das gleiche Problem. Mehrere Visual Studio-Versionen, einschließlich 2015 und 2017. Meine Lösung bestand darin, den Befehl cmake an der Eingabeaufforderung des Entwicklers 2017 auszuführen und die Visual Studio-Version 2015 mit folgenden Angaben anzugeben:

cmake -G "Visual Studio 14 2015" ..

kwes
quelle
0

Führen Sie den folgenden Befehl an der nativen 64/86 Visual Studio-Eingabeaufforderung aus, um die richtige Version festzulegen. Für vs2015 -% comspec% / k "C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" amd64 8.1% comspec % / k "C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86 8.1

Führen Sie den folgenden Befehl an der nativen 64/86 Visual Studio-Eingabeaufforderung aus, um die richtige Version festzulegen. Für vs2013 -% comspec% / k "C: \ Programme (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat" amd64 7.1% comspec% / k "C: \ Programme (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat" x86 7.1

Dadurch wird der richtige Pfad festgelegt und ohne Probleme ausgeführt. Ich habe dies auf WIN10 mit VS2013, VS2015, VS2017 getestet.

Manoj U.
quelle
0

Wenn Sie eine neuere Version von Visual Studio installieren, wird standardmäßig das neuere SDK ausgewählt.

Sie müssen das SDK (8.1) auswählen, das mit VS2015 installiert ist:

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

Ich habe hier die richtige Antwort gefunden

Marco Lazzarotto
quelle