修正︰ 內建的 Visual C++ 2013年損毀,與 「 指令無效 」 的例外狀況的程式

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:3174417
徵狀
當您使用 Microsoft Visual C++ 2013年建置程式時,程式會損毀,而且收到 「 指令無效 」 例外狀況。這是因為 Visual C++ 2013 x64 C 執行階段 (CRT) 中的某些浮點數的數學程式庫函式不正確地檢查函式會嘗試使用它們之前,是否有某些 AVX 和 FMA3 的指令。如果沒有可供使用的指示,這些函式呼叫會造成不正確的指示例外狀況 (0xc000001d)。受影響的函式包含記錄檔、 log10,和 pow,與其他人。

這個問題是最有可能發生在下列情況︰
  • 在舊版 Windows 作業系統不支援 AVX 的狀態儲存 (例如,Windows Vista) 是否它用在支援的 AVX 指令集的電腦上
  • 如果 AVX 狀態儲存在作業系統的開機設定已明確停用
  • 在 Windows 預先安裝環境 (Windows PE) 中

    附註 Windows PE 不支援 AVX 狀態儲存。

Microsoft 的連線已報告這個問題︰

發生的原因
之所以發生這個問題,因為 Visual C++ 2013 x64 C 的執行階段不會檢查作業系統是否支援 AVX 狀態儲存,然後再嘗試執行 AVX 或 FMA3 的指令。
解決方案
如果所有受影響的 c + + 二進位,由使用 Visual C++ 2013年建置使用 C 執行階段 DLL (msvcr120.dll),安裝更新 Microsoft Visual C++ 2013年可轉散發 – 12.0.40660.0 或更新版本。

如果受影響的 c + + 二進位檔會以靜態方式連結 Visual C++ 2013 C 執行階段,您就必須更新您的安裝的 Visual Studio 2013年藉由安裝 3174417 的 hotfix 和重建並重新部署受影響的二進位碼檔案。

附註這個問題並不影響舊版 Visual C++ C 執行階段 (Visual C++ 2012年和較早版本)。問題已修正之前初始版本的 Visual C++ 的 2015年由通用 CRT。

Microsoft 下載中心

若要更新以靜態方式連結 Visual C++ 2013 C 執行階段,3174417 的 hotfix 會就會釋放為僅限下載的更新,並不透過 Windows Update 發佈。它位於 「 Microsoft 下載中心 」 網站︰

下載立即下載套件。

若要更新動態連結 Visual C++ 2013 C 執行階段 Dll,更新可用的可轉散發是。如需詳細資訊,請參閱下列微軟知識庫文件︰

其他可行方案
如果您已經受到這個問題,略過這個問題,Towork 就停用數學程式庫中的 FMA3。您可以查詢系統是否支援透過呼叫GetEnabledXStateFeatures ,並明確停用 AVX,則在 CRT 中的,藉由呼叫_set_FMA3_enable(0)的 AVX 指示。

如需詳細資訊,請參閱 使用 XState 內容 在 MSDN 網站中。

宣告函式_set_FMA3_enable(0) <math.h>,而且只有當您建立的 x64 時,才使用。(這個問題會影響僅 x64 程式庫。)這會導致若要還原為使用非 FMA3 實作的數學程式庫。 </math.h>

警告:本文為自動翻譯

內容

文章識別碼:3174417 - 最後檢閱時間:07/29/2016 07:14:00 - 修訂: 1.0

Visual Studio 2013 Community Edition

  • kbfix kbqfe atdownload kbexpertiseadvanced kbsurveynew kbmt KB3174417 KbMtzh
意見反應