Visual Studio error: MSB8038: Spectre mitigation is enabled but Spectre mitigated libraries are not found
Folgender Fehler ist bei mir aufgetreten:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(402,5): warning MSB8038: Spectre mitigation is enabled but Spectre mitigated libraries are not found. Verify that the Visual Studio Workload includes the Spectre mitigated libraries. See https://aka.ms/Ofhn4c for more information.
Der Fehler wurde bei mir durch das installieren des WDK 1809 ausgelöst.
Das WDK setzt default einstellung von Spectre Mitigation in Project Settings/Configuration Properties/C/C++/Code Generation bei allen C/C++ Projekten auf enabled.
Das hat zur Folge dass der Compiler auf die Bibliotheken zurückgreift welche auch mit diesem Flag gebaut wurden.
Diese Bibliotheken werden aber nicht default mäßig installiert und fehlen dann natürlich beim Kompilieren.
Lösungen
Mehrere Lösungen sind für dieses Problem möglich. Für mich persönlich fiel die Wahl auf das Verändern der Default Dateien in Visual Studio siehe Entfernen des Flags aus den default Einstellungen in Visual Studio.
Schnell und einfach
Die einfachste und schnellste Möglichkeit das Problem zu Lösen ist die Projekteinstellung zurück zu setzen: Project Settings/Configuration Properties/C/C++/Code/Spectre Mitigation -> disabled
Nachteil an der Sache ist, wer mit cmake seine Projekte erstellte, wird diese Einstellung wieder verlieren, es sei denn diese Einstellung wird den cmake Projekten hinzugefügt.
Entfernen des Flags aus den default Einstellungen in Visual Studio
Diese Lösung stamm aus dem Visual Studio Forum
Removing the following:
<PropertyGroup>
<SpectreMitigation Condition="'$(SpectreMitigation)' == ''">Spectre</SpectreMitigation>
</PropertyGroup>
from files (WDKLocation)\10\build\WindowsDriver.Default.props and (VisualStudioLocation)\2017\Community\Common7\IDE\VC\VCTargets\Platforms(Platform name)\ImportBefore\Default\Microsoft.Cpp.WDK.props fixed the problem for me
Die Dateien die in den Fett markierten Pfaden liegen haben bei mir die ersehnte Lösung gebracht.
Spectre Bibliotheken installieren
Dazu muss im Visual Studio Installer die aktuelle Installation modifiziert werden und unter Einzelne Komponenten die benötigten Libs for Spectre Pakete nachinstalliert werden.
Downgrade zu 1803
Mit dem Downgrade zu 1803 wird der Bug in Visual Studio gar nicht erst gesetzt.
Leider kann ein einfacher Downgrade die Einstellung in Visual Studio nicht zurück setzen. Deshalb muss auch Visual Studio neu aufgesetzt werden.
Upgrade zu 1903
Mit dem Upgrade des WDK auf 1903 wird dieser Bug nicht gesetzt.
Aber wie ich auch beim Downgrade, wird diese Einstellung nicht zurückgesetzt.