Visual Studio sürümleri arasında C++ ikili uyumluluğu

Visual Studio 2013 ve önceki sürümlerdeki Microsoft C++ (MSVC) derleyici araç kümeleri, ana sürümler arasında ikili uyumluluğu garanti etmemektedir. Bu araç kümelerinin farklı sürümleri tarafından oluşturulan nesne dosyalarını, statik kitaplıkları, dinamik kitaplıkları ve yürütülebilir dosyaları bağlayamazsınız. ABI'ler, nesne biçimleri ve çalışma zamanı kitaplıkları uyumsuzdur.

Visual Studio 2015 ve sonraki sürümlerde bu davranışı değiştirdik. Derleyicinin bu sürümlerinden herhangi biri tarafından derlenen çalışma zamanı kitaplıkları ve uygulamaları ikili uyumlu. Visual Studio 2015'ten bu yana tüm sürümler için 14 ile başlayan C++ araç takımı ana numarasına yansıtılır. (Araç takımı sürümü Visual Studio 2015 için v140, 2017 için v141, 2019 için v142 ve 2022 için v143 sürümüdür). Visual Studio 2015 tarafından oluşturulmuş üçüncü taraf kitaplıklarınız olduğunu varsayalım. Bunları Visual Studio 2017, 2019 veya 2022 tarafından oluşturulan bir uygulamada kullanmaya devam edebilirsiniz. Eşleşen bir araç takımıyla yeniden derlemeye gerek yoktur. Microsoft Visual C++ Yeniden Dağıtılabilir paketinin en son sürümü (Yeniden Dağıtılabilir) hepsi için çalışır.

İkili uyumluluk kısıtlamaları

v140, v141, v142 ve v143 araç kümeleri ile küçük numaralı sürüm güncelleştirmeleri arasında ikili uyumluluk konusunda üç önemli kısıtlama vardır:

  • v140, v141, v142 ve v143 araç kümelerinin farklı sürümleriyle oluşturulan ikili dosyalar birleştirilebilir. Temel kural, bağlayıcının yalnızca kendisi ile aynı sürümde (veya önceki sürümde) bir araç takımı tarafından oluşturulan girişlerle çalışması gerektiğidir. Bu, LINK giriş dosyalarında açıklandığı gibi uygulamalar, içeri aktarma kitaplıkları, statik kitaplıklar ve diğer dosyalar için geçerlidir. Bazı durumlarda, özellikle içeri aktarma kitaplığı içeri/dışarı aktarmalar için kesin olarak kullanıyorsaextern "C", araç takımının daha sonraki bir sürümü tarafından oluşturulan örtük olarak bağlı DLL'nin içeri aktarma kitaplığı, araç takımının önceki bir sürümü kullanılarak bağlanabilir. Tüm bunların ne anlama geldiğinin bazı örnekleri aşağıda verilmiştir:
    • 2017 araç takımıyla derlenen bir uygulama (v141, sürüm 15.0 ile 15.9) Visual Studio 2022 sürüm 17.8 (v143) ile derlenmiş bir statik kitaplığa bağlanabilir, ancak bağlamanın 17.8 veya sonraki bir sürüm araç takımı kullanılarak yapılması gerekir.
    • VS 2015, 2017, 2019 veya 2022 kullanılarak oluşturulan uygulamalar ve kitaplıklar birbirine bağlanabilir, ancak bağlama, bağlayıcıya geçirdiğiniz ikili dosyalardan herhangi birini oluşturmak için kullanılan en son araç kümesi kadar yakın veya daha yeni bir araç takımı sürümü kullanılarak yapılmalıdır. Örneğin, VS 2015 sürüm 14.3, VS 2017 sürüm 15.9 ve VS 2019 sürüm 16.11'den araç kümeleri ile oluşturulan üç ikili dosya varsa, bunları 16.11 veya sonraki bir araç takımı sürümünü kullanarak bağlayabilirsiniz.
    • Dll daha yeni bir araç takımıyla oluşturulduysa, tüm dışarı aktarma işlemleri C dili çağırma kuralına (extern "C" ) uyuyorsa, içeri aktarma kitaplığı bazen eski araç kümeleriyle kullanılabilir. Ancak resmi olarak desteklenen tek durum, eski bir araç takımıyla daha yeni bir Windows SDK'sı kullanılmasıdır.
  • Uygulamanızın kullandığı Yeniden Dağıtılabilir,benzer bir ikili uyumluluk kısıtlaması vardır. Araç takımının desteklenen farklı sürümleri tarafından oluşturulan ikili dosyaları karıştırdığınızda, Yeniden Dağıtılabilir sürümü en az herhangi bir uygulama bileşeni tarafından kullanılan en son araç takımı kadar yeni olmalıdır.
  • (Tüm program iyileştirme) derleyici anahtarı kullanılarak derlenen veya (Bağlantı zamanı kod oluşturma) kullanılarak /LTCG bağlanan statik kitaplıklar veya nesne dosyaları, ikincil sürüm güncelleştirmeleri de dahil olmak üzere sürümler arasında ikili uyumlu değildir./GL kullanılarak /GL/LTCG derlenen tüm nesne dosyaları ve kitaplıkları derleme ve son bağlantı için tam olarak aynı araç takımını kullanmalıdır. Örneğin, Visual Studio 2019 sürüm 16.7 araç takımı kullanılarak oluşturulan /GL kod, Visual Studio 2019 sürüm 16.8 araç takımı kullanılarak /GL oluşturulan koda bağlanamaz. Derleyici Önemli hata C1047 yayar.

Microsoft Visual C++ Yeniden Dağıtılabilir Visual Studio 2015 ve sonraki sürümlerden yükseltme

Microsoft Visual C++ Yeniden Dağıtılabilir ana sürüm numarasını Visual Studio 2015, 2017, 2019 ve 2022 için aynı tuttuk. Bu, Redistributable'ın tek seferde yalnızca bir örneğinin yüklenebileceği anlamına gelir. Daha yeni bir sürüm, zaten yüklü olan eski sürümlerin üzerine yazar. Örneğin, bir uygulama Visual Studio 2015'ten Yeniden Dağıtılabilir'i yükleyebilir. Ardından, başka bir uygulama Visual Studio 2022'den Redistributable'ı yükler. 2022 sürümü eski sürümün üzerine yazar, ancak ikili uyumlu olduklarından, önceki uygulama hala düzgün çalışır. Redistributable'ın en son sürümünün en yeni özelliklere, güvenlik güncelleştirmelerine ve hata düzeltmelerine sahip olduğundan emin olacağız. Bu nedenle her zaman en son kullanılabilir sürüme yükseltmenizi öneririz.

Benzer şekilde, daha yeni bir sürüm zaten yüklü olduğunda eski bir Yeniden Dağıtılabilir'i yükleyemezsiniz. Denerseniz yükleyici bir hata bildirir. 2017 veya 2019 Yeniden Dağıtılabilir'i 2022 sürümüne sahip bir makineye yüklerseniz aşağıdaki gibi bir hata görürsünüz:

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.

Bu hata tasarım gereğidir. En yeni sürümü yüklü tutmanızı öneririz. Yükleyicinizin bu hatadan sessizce kurtaraabildiğinden emin olun.

Önemli

Windows XP için çalışma zamanı kitaplığı desteği artık en son Visual Studio için Visual C++ Yeniden Dağıtılabilir kullanılamaz. Windows XP'yi destekleyen son yeniden dağıtılabilir sürüm 16.7 'dir (dosya sürümü 14.27.29114.0). Windows XP uygulamalarınız yeniden dağıtılabilir sürümüyle dağıtıldıysa veya daha sonraki bir sürüme güncelleştirildiyse, uygulamalar çalışmaz. Daha fazla bilgi ve Yeniden Dağıtılabilir'in Windows XP'yi destekleyen bir sürümünü alma hakkında daha fazla bilgi için bkz . Windows XP için programları yapılandırma.

Ayrıca bkz.

Visual C++ değişiklik geçmişi
Desteklenen en son Visual C++ Yeniden Dağıtılabilir indirmeleri