Bagikan melalui


Kompatibilitas biner C++ antara versi Visual Studio

Alat Build Microsoft C++ (MSVC) di Visual Studio 2013 dan yang lebih lama tidak menjamin kompatibilitas biner di seluruh versi utama. Anda tidak dapat menautkan file objek, pustaka statis, pustaka dinamis, dan file yang dapat dieksekusi yang dibangun oleh berbagai versi alat build ini. ABI, format objek, dan pustaka runtime tidak kompatibel.

Kami telah mengubah perilaku ini di Visual Studio 2015 dan versi yang lebih baru. Pustaka runtime dan aplikasi yang dikompilasi oleh salah satu versi pengkompilasi ini kompatibel dengan biner. Ini tercermin dalam nomor utama MSVC Build Tools, yang dimulai dengan 14 untuk semua versi sejak Visual Studio 2015. (Versi alat build adalah v140 untuk Visual Studio 2015, v141 untuk 2017, v142 untuk 2019, dan v143 untuk 2022). Katakanlah Anda memiliki pustaka pihak ketiga yang dibangun oleh Visual Studio 2015. Anda masih dapat menggunakannya dalam aplikasi yang dibangun oleh Visual Studio 2017, 2019, 2022, atau 2026. Tidak perlu kompilasi ulang dengan versi yang cocok. Versi terbaru paket Microsoft Visual C++ Redistributable (Redistributable) berfungsi untuk semuanya.

Pembatasan kompatibilitas biner

Ada tiga batasan penting pada kompatibilitas biner antara alat build v140, v141, v142, v143, dan v145 serta pembaruan versi bernomor minor:

  • Biner yang dibuat dengan versi alat build v140, v141, v142, v143, dan v145 yang berbeda dapat digabungkan. Aturan utamanya adalah bahwa linker hanya boleh bekerja dengan input yang dibangun oleh alat build yang merupakan versi yang sama (atau lebih lama) seperti itu sendiri. Ini berlaku untuk aplikasi, pustaka impor, pustaka statis, dan file lainnya seperti yang dijelaskan dalam file input LINK. Dalam beberapa kasus, pustaka impor untuk DLL yang ditautkan secara implisit yang dibangun oleh versi alat build yang lebih baru dapat ditautkan menggunakan versi alat build yang lebih lama--terutama jika pustaka impor benar-benar digunakan extern "C" untuk impor/ekspor. Berikut adalah beberapa contoh apa artinya ini semua:
    • Aplikasi yang dikompilasi dengan alat build 2017 (v141, versi 15.0 hingga 15.9) dapat ditautkan ke pustaka statis yang dikompilasi dengan Visual Studio 2022 versi 17.8 (v143), tetapi penautan harus dilakukan menggunakan alat build versi 17.8 atau yang lebih baru.
    • Aplikasi dan pustaka yang dibangun menggunakan VS 2015, 2017, 2019, 2022, dan 2026 dapat ditautkan bersama-sama, tetapi penautan harus dilakukan menggunakan versi alat build yang terbaru, atau lebih baru daripada, alat build terbaru yang digunakan untuk membangun salah satu biner yang Anda berikan ke linker. Misalnya, mengingat tiga biner yang dibangun dengan alat build dari VS 2015 versi 14.3, VS 2017 versi 15.9, dan VS 2019 versi 16.11, Anda dapat menautkannya menggunakan versi alat build apa pun yang 16.11 atau yang lebih baru.
    • Jika DLL dibangun dengan alat build yang lebih baru, pustaka impor terkadang dapat digunakan dengan alat build yang lebih lama jika semua ekspor mengikuti konvensi panggilan bahasa C (extern "C"). Namun, satu-satunya kasus yang didukung secara resmi adalah menggunakan SDK Windows yang lebih baru dengan alat pembangun yang lebih lama.
  • Redistributable yang digunakan aplikasi Anda memiliki batasan kompatibilitas biner yang serupa. Saat Anda mencampur biner yang dibangun oleh berbagai versi alat build yang didukung, versi Redistributable harus setidaknya sama baru dengan alat build terbaru yang digunakan dalam komponen aplikasi mana pun.
  • Pustaka statis atau file objek yang dikompilasi menggunakan /GL sakelar pengkompilasi (Pengoptimalan seluruh program) atau ditautkan menggunakan/LTCG(Pembuatan kode waktu tautan)tidak kompatibel dengan biner di seluruh versi, termasuk pembaruan versi minor. Semua file objek dan pustaka yang dikompilasi menggunakan /GL dan /LTCG harus menggunakan alat build yang sama persis untuk kompilasi dan tautan akhir. Misalnya, kode yang dibuat dengan menggunakan /GL alat build Visual Studio 2019 versi 16.7 tidak dapat ditautkan ke kode yang dibangun dengan menggunakan /GL di alat build Visual Studio 2019 versi 16.8. Pengkompilasi memancarkan kesalahan Fatal C1047.

Meningkatkan Microsoft Visual C++ Redistributable dari Visual Studio 2015 dan yang lebih baru

Kami telah mempertahankan nomor versi utama Microsoft Visual C++ Redistributable sama untuk Visual Studio 2015, 2017, 2019, 2022, dan 2026. Itu berarti hanya satu instans Redistributable yang dapat diinstal pada satu waktu. Versi yang lebih baru menimpa versi lama apa pun yang sudah diinstal. Misalnya, satu aplikasi dapat menginstal Redistributable dari Visual Studio 2015. Kemudian, aplikasi lain menginstal Redistributable dari Visual Studio 2026. Versi 2026 menggantikan versi lama, tetapi karena kompatibel secara biner, aplikasi sebelumnya tetap berfungsi dengan baik. Kami memastikan versi terbaru Redistributable memiliki semua fitur terbaru, pembaruan keamanan, dan perbaikan bug. Itulah sebabnya kami selalu menyarankan Anda meningkatkan ke versi terbaru yang tersedia.

Demikian pula, Anda tidak dapat menginstal Redistributable yang lebih lama ketika versi yang lebih baru sudah diinstal. Alat penginstal melaporkan kesalahan jika Anda mencoba. Misalnya, Anda akan melihat kesalahan seperti ini jika Menginstal Redistributable 2022 pada komputer yang sudah memiliki versi 2026:

0x80070666 - Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.

Kesalahan ini didesain. Kami sarankan Anda menjaga versi terbaru tetap terinstal. Pastikan alat penginstal Anda dapat pulih dari kesalahan ini secara diam-diam.

Penting

Dukungan pustaka runtime untuk Windows XP tidak lagi tersedia di Visual C++ Redistributable terbaru untuk Visual Studio. Yang terakhir dapat didistribusikan ulang untuk mendukung Windows XP adalah versi 16.7 (file versi 14.27.29114.0). Jika aplikasi Windows XP Anda disebarkan dengan atau diperbarui ke versi yang lebih baru dari yang dapat didistribusikan ulang, aplikasi tidak akan berjalan. Untuk informasi selengkapnya, dan cara mendapatkan versi redistributable yang mendukung Windows XP, lihat Mengonfigurasi program untuk Windows XP.

Lihat juga

Riwayat perubahan Visual C++
Unduhan Visual C++ Redistributable terbaru yang didukung
Cara mengaudit penggunaan versi Visual C++ Runtime
FAQ Siklus Hidup - Perpustakaan Visual C++ yang Dapat Didistribusikan Ulang dan perpustakaan runtime