Binární kompatibilita C++ mezi Visual Studio verzemi

Sady nástrojů kompilátoru Microsoft C++ (MSVC) v Visual Studio 2013 a dřívějších verzích nezaručují binární kompatibilitu napříč hlavními verzemi. Pomocí různých verzí těchto sad nástrojů nemůžete propojit soubory objektů, statické knihovny, dynamické knihovny a spustitelné soubory. Rozhraní ACI, formáty objektů a knihovny modulu runtime jsou nekompatibilní.

Toto chování jsme změnili v Visual Studio 2015 a novějších verzích. Knihovny a aplikace modulu runtime kompilované libovolnou z těchto verzí kompilátoru jsou kompatibilní s binárními soubory. Promítne se do velkého čísla sady nástrojů C++, které začíná číslem 14 pro všechny verze od Visual Studio 2015. (Verze sady nástrojů je v140 pro Visual Studio 2015, v141 pro 2017, v142 pro 2019 a v143 pro 2022). Řekněme, že máte knihovny třetích stran sestavené Visual Studio 2015. Můžete je stále používat v aplikaci sestavené Visual Studio 2017, 2019 nebo 2022. Není nutné znovu kompilovat s odpovídající sada nástrojů. Nejnovější verze balíčku Microsoft Visual C++ Redistributable (Redistributable) funguje pro všechny z nich.

Omezení binární kompatibility

Existují tři důležitá omezení binární kompatibility mezi nástroji v140, v141, v142 a v143 a aktualizacemi podverd:

  • Binární soubory sestavené různými verzemi sad nástrojů v140, v141, v142 a v143 můžete kombinovat. Musíte ale vytvořit odkaz pomocí sady nástrojů, která je alespoň tak nejnovější jako nejnovější binární soubor ve vaší aplikaci. Tady je příklad: Aplikaci zkompilovanou pomocí libovolné sady nástrojů 2017 (verze 141, verze 15.0 až 15.9) můžete propojit se statickou knihovnou zkompilovanou například pomocí Visual Studio 2019 verze 16.2 (v142). Stačí je propojit pomocí sady nástrojů verze 16.2 nebo novější. Knihovnu verze 16.2 můžete propojit s aplikací verze 16.4, pokud používáte sady nástrojů 16.4 nebo novější.

  • Distribuovatelné součásti, které vaše aplikace používá, má podobné omezení binární kompatibility. Při kombinaci binárních souborů sestavených různými podporovanými verzemi sady nástrojů musí být verze Redistributable minimálně stejně nová jako nejnovější sada nástrojů používaná jakoukoli komponentou aplikace.

  • Statické knihovny nebo soubory objektů zkompilované pomocí přepínače kompilátoru (optimalizace celého programu) nebo propojené pomocí (generování kódu v době propojení)nejsou napříč verzemi kompatibilní s binárními soubory, včetně aktualizací podverz. Všechny soubory objektů a knihovny zkompilované pomocí a musí používat přesně stejnou sada nástrojů pro kompilaci a /GL/LTCG konečný odkaz. Například kód sestavený pomocí sady nástrojů Visual Studio 2019 verze 16.7 nelze propojit s kódem sestavený pomocí sady nástrojů /GL/GL Visual Studio 2019 verze 16.8. Kompilátor vygeneruje závažná chyba C1047.

Upgrade Microsoft Visual C++ Redistributable z Visual Studio 2015 a novějších verzí

Hlavní číslo hlavní verze Microsoft Visual C++ Redistributable jsme udrž měli stejné pro Visual Studio 2015, 2017, 2019 a 2022. To znamená, že se v jednu chvíli může nainstalovat jenom jedna instance Redistributable. Novější verze přepíše všechny starší verze, které už jsou nainstalované. Například jedna aplikace může distribuovatelné součásti nainstalovat z Visual Studio 2015. Potom jiná aplikace nainstaluje Distribuovatelné součásti z Visual Studio 2022. Verze 2022 přepíše starší verzi, ale vzhledem k tomu, že jsou binární, předchozí aplikace stále funguje správně. Ověřujeme, že nejnovější verze Distribuovatelných součástí obsahuje všechny nejnovější funkce, aktualizace zabezpečení a opravy chyb. Proto vždy doporučujeme upgradovat na nejnovější dostupnou verzi.

Podobně nemůžete nainstalovat starší distribuovatelné součásti, pokud je už nainstalovaná novější verze. Pokud se o to pokusíte, instalační program zobrazí chybu. Pokud na počítač, který už má verzi 2022, nainstalujete distribuovatelné součásti 2017 nebo 2019, zobrazí se podobná chyba:

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.

Tato chyba je z návrhu. Doporučujeme zachovat nejnovější verzi nainstalovanou. Ujistěte se, že se instalační program dokáže z této chyby bezobslužně zotavit.

Důležité

Podpora knihovny runtime pro Windows XP už není v nejnovější verzi Distribuovatelné součásti Visual C++ pro Visual Studio. Poslední distribuovatelné součásti pro podporu Windows XP je verze 16.7 (soubor verze 14.27.29114.0). Pokud jsou Windows XP nasazené s novější verzí distribuovatelné součásti nebo se aktualizují na novější verzi, aplikace se nebudou spouštět. Další informace a informace o tom, jak získat verzi distribuovatelné součásti, která podporuje Windows XP, najdete v tématu Konfigurace programů pro Windows XP.

Viz také

Visual C++ historie změn
Nejnovější podporované soubory Visual C++ Redistributable ke stažení