Problembeschreibung
Beim Erstellen einer Anwendung mit Microsoft Visual C++ 2013 stürzt das Programm ab, und Sie erhalten eine Ausnahme "Ungültige Anweisung". Dies tritt auf, weil einige Gleitkommaoperationen Bibliotheksfunktionen in Visual C++ 2013 X64 C Runtime (CRT), ob bestimmte Befehle AVX und FMA3 verfügbar sind, bevor die Funktionen ihrer Verwendung nicht richtig überprüfen. Wenn die Informationen nicht verfügbar sind, führen Aufrufe an diese Funktionen eine ungültige Anweisung-Ausnahme (0xc000001d). Betroffene Funktionen gehören Log, log10, und pow.
Dieses Problem wird wahrscheinlich in den folgenden Szenarien auftreten:
-
Auf eine ältere Version des Windows-Betriebssystems, die AVX unterstützt Status speichern (z. B. Windows Vista) auf einem Computer verwendet wird, die den AVX-Befehlssatz unterstützt
-
Wenn die Boot-Konfiguration AVX Zustand speichern deaktiviert
-
Unter Windows gehörende (Windows PE)
Hinweis Windows PE unterstützt AVX Zustand speichern.
Dieses Problem wurde in Microsoft Connect gemeldet:
X64 log() Funktion verwendet Vpsrlq AVX-Anweisung Betriebssystem (es unter Vista X64 stürzt ab)
Visual Studio 2013 RTM: C++ X64 code Generation Fehler AVX2 Informationen
Ursache
Dieses Problem tritt auf, weil Visual C++ 2013 X64 C Runtime nicht überprüft, ob das Betriebssystem AVX Zustand speichern unterstützt, bevor AVX oder der FMA3 ausgeführt.
Problemlösung
Wenn alle betroffene C++-Binärdateien, die mit Visual C++ 2013 integriert sind C-Laufzeit-DLL (msvcr120.dll) verwenden, installieren Sie aktualisierte Microsoft Visual C++ 2013 Redistributable – 12.0.40660.0 oder höher.
Wenn die betroffenen C++ Binärdateien statisch Visual C++ 2013 C Runtime verknüpfen, müssen Sie die Installation von Visual Studio 2013 aktualisieren 3174417 Hotfix installieren und Neuerstellen und die betroffenen Binärdateien einbringt.
Hinweis Dieses Problem betrifft Versionen der Visual C++ C Runtime (Visual C++ 2012 und früheren Versionen) nicht. Vor der ersten Veröffentlichung von Universal CRT, die von Visual C++ 2015 verwendet wird, wurde das Problem behoben.
Microsoft Download Center
Statisch verknüpften Visual C++ 2013 C-Laufzeit, 3174417 Hotfix als reine Update veröffentlicht und nicht über Windows Update verteilt. Es steht auf der Microsoft Download Center-Website:
Downloaden Sie Paket jetzt.
Dynamisch verknüpfte Visual C++ 2013 C Runtime-DLLs, eine aktualisierte aktualisieren verteilbare Datei steht. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
3179560 Update für Visual C++ 2013 und Visual C++ Redistributable Package
PROBLEMUMGEHUNG
Um dieses Problem zu umgehen, deaktivieren Sie FMA3 Math Library, wenn Sie von diesem Problem betroffen sind. Sie können Abfragen, ob AVX-Anweisungen unterstützt GetEnabledXStateFeatures aufrufen und in der CRT AVX explizit durch Aufrufen von _set_FMA3_enable(0)deaktivieren.
Weitere Informationen finden Sie unter Arbeiten mit XState Kontextauf der MSDN-Website.
Funktion _set_FMA3_enable(0) in < math.h > deklariert, und es steht nur bei für X64 erstellen. (Dieses Problem betrifft nur die X64 Bibliotheken für.) Dadurch Math-Bibliothek mit der Implementierung nicht FMA3 wiederherstellen.