Partager via


Compatibilité binaire C++ entre les versions de Visual Studio

Les outils de génération Microsoft C++ (MSVC) dans Visual Studio 2013 et versions antérieures ne garantissent pas la compatibilité binaire entre les versions principales. Vous ne pouvez pas lier des fichiers objet, des bibliothèques statiques, des bibliothèques dynamiques et des exécutables créés par différentes versions de ces outils de génération. Les API, les formats d’objet et les bibliothèques runtime sont incompatibles.

Nous avons modifié ce comportement dans Visual Studio 2015 et versions ultérieures. Les bibliothèques et applications runtime compilées par l’une de ces versions du compilateur sont compatibles binaires. Il est reflété dans le numéro principal des outils de construction MSVC, qui commence par 14 pour toutes les versions depuis Visual Studio 2015. (La version des outils de génération est v140 pour Visual Studio 2015, v141 pour 2017, v142 pour 2019 et v143 pour 2022). Supposons que vous disposez de bibliothèques tierces créées par Visual Studio 2015. Vous pouvez toujours les utiliser dans une application générée par Visual Studio 2017, 2019, 2022 ou 2026. Il n’est pas nécessaire de recompiler avec une version correspondante. La dernière version du package redistribuable Microsoft Visual C++ Redistribuable (le Redistribuable) fonctionne pour tous ces derniers.

Restrictions sur la compatibilité binaire

Il existe trois restrictions importantes sur la compatibilité binaire entre les outils de génération v140, v141, v142, v143 et v145 et les mises à jour de version numérotée mineure :

  • Les fichiers binaires créés avec différentes versions des outils de génération v140, v141, v142, v143 et v145 peuvent être combinés. La règle clé est que l’éditeur de liens ne doit fonctionner qu’avec les entrées générées par les outils de génération qui sont la même version (ou une version antérieure) que lui-même. Cela s’applique aux applications, aux bibliothèques d’importation, aux bibliothèques statiques et à d’autres fichiers, comme décrit dans fichiers d’entrée LINK. Dans certains cas, une bibliothèque d’importation pour une DLL implicitement liée créée par une version ultérieure des outils de génération peut être liée à l’aide d’une version antérieure des outils de génération, en particulier si la bibliothèque d’importation utilise extern "C" strictement les importations/exportations. Voici quelques exemples de ce que cela signifie :
    • Une application compilée avec les outils de génération 2017 (v141, versions 15.0 à 15.9) peut être liée à une bibliothèque statique compilée avec Visual Studio 2022 version 17.8 (v143), mais la liaison doit être effectuée à l’aide d’une version 17.8 ou d’outils de génération ultérieures.
    • Les applications et bibliothèques créées à l’aide de VS 2015, 2017, 2019, 2022 et 2026 peuvent être liées, mais la liaison doit être effectuée à l’aide d’une version des outils de génération aussi récents que, ou plus récents, que les outils de génération les plus récents utilisés pour générer l’un des fichiers binaires que vous transmettez à l’éditeur de liens. Par exemple, étant donné trois fichiers binaires créés avec des outils de génération à partir de VS 2015 version 14.3, VS 2017 version 15.9 et VS 2019 version 16.11, vous pouvez les lier à l’aide de n’importe quelle version d’outils de génération qui est 16.11 ou ultérieure.
    • Si une DLL est générée avec des outils de génération plus récents, la bibliothèque d’importation peut parfois être utilisée avec des outils de génération plus anciens si toutes les exportations suivent la convention d’appel de langue C (extern "C"). Toutefois, le seul cas officiellement pris en charge consiste à utiliser un SDK Windows plus récent avec des outils de développement plus anciens.
  • Le redistribuable que votre application utilise a une restriction de compatibilité binaire similaire. Lorsque vous mélangez des fichiers binaires générés par différentes versions prises en charge des outils de génération, la version redistribuable doit être au moins aussi nouvelle que les derniers outils de génération utilisés par n’importe quel composant d’application.
  • Les bibliothèques statiques ou les fichiers objet compilés à l’aide de l’ /GL (optimisation du programme entier) commutateur du compilateur ou liés à l’aide de /LTCG (génération de code au moment du lien)ne sont pas compatibles binaires entre les versions, y compris les mises à jour de version mineures. Tous les fichiers et bibliothèques d’objets compilés à l’aide /GL et /LTCG doivent utiliser exactement les mêmes outils de génération pour la compilation et le lien final. Par exemple, le code généré à l’aide /GL des outils de génération Visual Studio 2019 version 16.7 ne peut pas être lié au code généré à l’aide /GL des outils de génération Visual Studio 2019 version 16.8. Le compilateur émet erreur irrécupérable C1047.

Mettre à niveau Microsoft Visual C++ Redistribuable à partir de Visual Studio 2015 et versions ultérieures

Nous avons conservé le numéro de version principale Redistribuable Microsoft Visual C++ identique pour Visual Studio 2015, 2017, 2019, 2022 et 2026. Cela signifie qu’une seule instance de Redistributable peut être installée à la fois. Une version plus récente remplace toute version antérieure déjà installée. Par exemple, une application peut installer redistribuable à partir de Visual Studio 2015. Une autre application installe ensuite le Redistributable depuis Visual Studio 2026. La version 2026 remplace l’ancienne version, mais parce qu’elle est compatible binaire, l’application précédente fonctionne toujours correctement. Nous nous assurons que la dernière version du Redistributable dispose de toutes les fonctionnalités, mises à jour de sécurité et correctifs de bogues les plus récents. C’est pourquoi nous vous recommandons toujours de procéder à la mise à niveau vers la dernière version disponible.

De même, vous ne pouvez pas installer un redistribuable plus ancien lorsqu’une version plus récente est déjà installée. Le programme d’installation signale une erreur si vous essayez. Par exemple, une erreur semblable à celle-ci s’affiche si vous installez le redistribuable 2022 sur un ordinateur qui dispose déjà de la version 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.

Cette erreur est liée à la conception. Nous vous recommandons de conserver la version la plus récente installée. Assurez-vous que votre programme d’installation peut récupérer à partir de cette erreur en mode silencieux.

Importante

La prise en charge de la bibliothèque runtime pour Windows XP n’est plus disponible dans la dernière version de Redistributable Visual C++ pour Visual Studio. Le dernier redistribuable pour prendre en charge Windows XP est la version 16.7 (version de fichier 14.27.29114.0). Si vos applications Windows XP sont déployées avec ou mises à jour vers une version ultérieure du redistribuable, les applications ne s’exécutent pas. Pour plus d’informations et comment obtenir une version du redistribuable qui prend en charge Windows XP, consultez Configuration des programmes pour Windows XP.

Voir aussi

Historique des modifications de Visual C++
Les derniers téléchargements de Visual C++ Redistributable pris en charge
Comment auditer l’utilisation de la version du runtime Visual C++
FAQ sur le cycle de vie - Bibliothèques redistribuables et runtime Visual C++