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.cpp
ist 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 PATH
Umgebungsvariablen in verschiedenen VS-Befehlsansagen:
PATH
Enthält in einer VS 2013-EingabeaufforderungC:\Program Files (x86)\Windows Kits\8.1\bin\x64
PATH
Enthält in einer VS 2017-EingabeaufforderungC:\Program Files (x86)\Windows Kits\10\bin\x64 C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
PATH
Enthält jedoch in einer VS 2015-Eingabeaufforderung nurC:\Program Files (x86)\Windows Kits\10\bin\x64
was nicht enthält
rc.exe
.
Fragen
Ist dies ein bekanntes Problem oder ist es spezifisch für mein System?
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?
Was ist ein sauberer Weg, um dies zu lösen?
Bearbeiten: Installierte VS 2017-Komponenten:
quelle
C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.EXE
.Antworten:
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.
quelle
vcvarsall x64
unter 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.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.
quelle
C:\Program Files (x86)\Windows Kits\10\bin\x86
, dass du es gemeint hast und nichtC:\Program Files (x86)\Windows Kits\10\bin\x64
?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\x64
undWindows Kits\10\bin\x86
Ordner um - es sieht so aus, als würden sie nicht verwendet.PS
mklink
ist einCMD
Befehl, der unter nicht verfügbar istPowerShell
quelle
Aus irgendeinem Grund funktionierte das integrierte Installationsprogramm für Tools (1.4.1) und Windows 10 SDK (10.0.14393) bei mir nicht:
C:\Program Files (x86)\Windows Kits\10\bin\x86
wurde während der Installation gefüllt (Erfolg!)-2147023293
/ zurück0x80048646
.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\x86
wird und bleibt gefüllt, einschließlichrc.exe
.Windows 7 x64, Visual Studio Professional 2015 Update 3.
quelle
Die Angabe
CMAKE_SYSTEM_VERSION=8.1
löste das Problem für mich.quelle
Ä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
VisualStudioVersion
Umgebungsvariable auf15.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.0
PS:$env:VisualStudioVersion = '15.0'
in TeamCity:env.VisualStudioVersion
Parameter hinzufügen ). Eine andere Alternative besteht darin, dieses Verzeichnis als Eigenschaft an MSBuild zu übergeben (übergeben/p:VisualStudioVersion=15.0
oder in teamCity hinzufügensystem.VisualStudioVersion
).quelle
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.
quelle
Für jeden, der daran hängen bleibt, ist ein besonderes Problem:
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
. . . . . .
[*] Es kann durchaus mit VS 2017 kommen, und vergessen Sie nicht, dass VS 2017 möglicherweise mit etwas anderem, Unity usw. installiert wird.
quelle
Ö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%
quelle
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" ..
quelle
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.
quelle
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
quelle