FIX: Program yang dibuat dalam Visual C++ 2013 lumpuh dengan pengecualian "Ilegal instruksi"

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 3174417
Gejala
Ketika Anda membangun program dengan menggunakan Microsoft Visual C++ 2013, program lumpuh dan Anda menerima pengecualian "Ilegal instruksi". Hal ini terjadi karena beberapa fungsi pustaka floating-point matematika di Runtime Visual C++ 2013 x64 C (CRT) tidak benar memeriksa apakah instruksi AVX dan FMA3 tertentu tersedia sebelum fungsi mencoba menggunakannya. Jika petunjuk tidak tersedia untuk digunakan, panggilan ke fungsi-fungsi ini menyebabkan pengecualian ilegal instruksi (0xc000001d). Fungsi yang terpengaruh meliputi log, log10, dan pow, dan lain-lain.

Masalah ini kemungkinan besar terjadi dalam skenario berikut:
  • Pada versi lama dari sistem operasi Windows yang tidak mendukung AVX menyatakan menyimpan (misalnya, Windows Vista) jika digunakan di komputer yang mendukung set instruksi AVX
  • Jika menyimpan status AVX dinonaktifkan secara eksplisit di konfigurasi boot sistem operasi
  • Di lingkungan prainstal Windows (Windows PE)

    Catatan Windows PE tidak mendukung AVX status penyimpanan.

Masalah ini telah dilaporkan pada Microsoft Connect:

Penyebab
Masalah ini terjadi karena Runtime Visual C++ 2013 x64 C tidak memeriksa apakah sistem operasi mendukung AVX status menyimpan sebelum mencoba untuk menjalankan instruksi AVX atau FMA3.
Pemecahan masalah
Jika semua terpengaruh C++ biner yang dibuat dengan menggunakan Visual C++ 2013 menggunakan DLL Runtime C (msvcr120.dll), instal pemutakhiran Microsoft Visual C++ 2013 Redistributable-12.0.40660.0 atau versi yang lebih baru.

Jika Anda terkena C++ biner statis link Visual C++ 2013 C Runtime, Anda harus memperbarui pemasangan Visual Studio 2013 dengan menginstal 3174417 hotfix dan membangun kembali dan redeploying biner yang terpengaruh.

Catatan Masalah ini tidak mempengaruhi versi Visual C++ C Runtime (Visual C++ 2012 dan versi yang lebih lawas). Masalah telah diperbaiki sebelum peluncuran awal CRT Universal yang digunakan oleh Visual C++ 2015.

Pusat Unduh Microsoft

Untuk memutakhirkan statis tertaut Visual C++ 2013 C Runtime, 3174417 hotfix diluncurkan sebagai pemutakhiran download-saja dan tidak didistribusikan melalui Pemutakhiran Windows. Hal ini tersedia di situs web Microsoft Download Center:

UnduhUnduh paket sekarang.

Memperbarui terkait secara dinamis Visual C++ 2013 C Runtime dll, diperbarui redistributable tersedia. Untuk informasi selengkapnya, lihat artikel Pangkalan Pengetahuan Microsoft berikut ini:

Teknik pemecahan masalah
Towork masalah ini, Nonaktifkan FMA3 di Perpustakaan matematika jika Anda terpengaruh oleh masalah ini. Anda dapat meminta Apakah sistem mendukung instruksi AVX dengan meneleponGetEnabledXStateFeatures dan menonaktifkan AVX di CRT secara eksplisit dengan menelepon _set_FMA3_enable(0).

Untuk informasi selengkapnya, lihat Bekerja dengan XState konteks pada MSDN website.

Function _set_FMA3_enable(0) menyatakan dalam <math.h>, dan tersedia hanya ketika Anda membangun untuk x64. (Ini masalah mempengaruhi hanya x64 Perpustakaan.) Hal ini menyebabkan Perpustakaan matematika untuk kembali untuk menggunakan penerapan non-FMA3. </math.h>

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 3174417 - Tinjauan Terakhir: 07/28/2016 08:23:00 - Revisi: 1.0

Visual Studio 2013 Community Edition

  • kbfix kbqfe atdownload kbexpertiseadvanced kbsurveynew kbmt KB3174417 KbMtid
Tanggapan