Oprava: Programy, ktoré sú vytvorené v Visual C++ 2013 zlyhá s výnimkou "Neplatná inštrukcia"

Príznaky

Pri vytváraní programu pomocou Microsoft Visual C++ 2013, program zlyhá a zobrazí výnimku "Neplatná inštrukcia". Príčinou niektorých funkcií rádovej matematické Visual C++ 2013 x64 C runtime (CRT) správne skontrolovať, či niektoré AVX a FMA3 pokyny sú k dispozícii, pred použitím ich funkcie. Ak nie sú k dispozícii pokyny, volania týchto funkcií spôsobiť výnimku neplatná inštrukcia (0xc000001d). Príslušné funkcie patrí log, log10, a pow a ďalšie.

Tento problém je pravdepodobne vyskytnúť v nasledujúcich situáciách:

  • Na staršiu verziu operačného systému Windows, ktorá nepodporuje funkciu AVX štát ukladanie (napríklad Windows Vista), ak sa používa v počítači, ktorý podporuje množinu inštrukcií AVX

  • Ak AVX stav ukladania vypnutá explicitne Konfigurácia systému

  • Predinštalovať prostredie systému Windows (Windows PE)

    Poznámka: Windows PE nepodporuje funkciu AVX stav ukladania.


Tento problém bol hlásený Microsoft Connect:

x64 log() funkcia používa vpsrlq AVX inštrukcie bez ohľadu na operačný systém (zlyhá, Vista x64)

Visual Studio 2013 RTM: C++ x64 kód generácie chyba AVX2 pokyny

Príčina

Tento problém sa vyskytuje, pretože Runtime Visual C++ 2013 x64 C skontrolovať, či operačný systém podporuje AVX stavu ukladanie pred spustiť AVX alebo FMA3 pokyny.

Riešenie

Ak všetky príslušné C++ binárne súbory, ktoré sú vytvorené pomocou Visual C++ 2013 C Runtime knižnice DLL (msvcr120.dll), Inštalácia aktualizácie Microsoft Visual C++ 2013 Redistribuovateľný balík – 12.0.40660.0 alebo novšiu verziu.

Ak váš príslušné binárne súbory C++ staticky Visual C++ 2013 C Runtime, musíte aktualizovať inštaláciu aplikácie Visual Studio 2013 nainštalovať 3174417 rýchlu opravu a obnovu a presunutie príslušné binárne súbory.









Poznámka: Tento problém neovplyvňuje staršie verzie Visual C Runtime C++ (Visual C++ 2012 a staršie verzie). Tento problém bol vyriešený pred úvodnou Universal CRT, ktorý používa Visual C++ 2015.

Centrum sťahovania softvéru

Aktualizovať staticky prepojené Visual C++ Runtime C 2013, 3174417 rýchla oprava je vydané len na prevzatie aktualizácie a nie je distribuovaný prostredníctvom služby Windows Update. Je k dispozícii na webovej lokalite Microsoft Download Center:

Download Prevziať balík.

Aktualizovať dynamicky prepojené Visual C++ 2013 C Runtime knižnice DLL, aktualizovanú Redistribuovateľný balík je k dispozícii. Ďalšie informácie nájdete nasledujúci článok databázy Microsoft Knowledge Base:

3179560 aktualizácia pre Visual C++ 2013 a Visual C++ Redistribuovateľný balík

Alternatívne riešenie

Obísť tento problém, vypnite FMA3 matematické knižnice, ak sú ovplyvnené tento problém. Služba či systém podporuje AVX pokyny volaním GetEnabledXStateFeatures a vypnutie AVX CRT explicitne volaním _set_FMA3_enable(0).

Ďalšie informácie nájdete v Práca s XStatena webovej lokalite MSDN.

Funkcia _set_FMA3_enable(0) za < math.h > a je k dispozícii len pri vytváraní pre x64. (Tento problém ovplyvňuje len x64 knižnice.) To spôsobí matematické knižnice vrátiť pomocou bez FMA3 implementácie.

Potrebujete ďalšiu pomoc?

Rozšírte svoje zručnosti
Preskúmať školenie
Buďte medzi prvými, ktorí získajú nové funkcie
Pripojiť k Microsoft insiderov chcú

Považujete poskytnuté informácie za užitočné?

Ďakujem za vaše pripomienky!

Ďakujeme vám za pripomienky. Pravdepodobne vám pomôže, ak vás spojíme s pracovníkom podpory pre Office.

×