Mettre à niveau votre code vers le CRT universel
La bibliothèque Microsoft C Runtime (CRT) a été refactorisé dans Visual Studio 2015. La bibliothèque standard C, les extensions POSIX et les fonctions, macros et variables globales spécifiques à Microsoft ont été déplacées vers une nouvelle bibliothèque, à savoir la bibliothèque Runtime C universelle (CRT universel ou UCRT). Les composants spécifiques au compilateur du CRT ont été déplacés vers une nouvelle bibliothèque vcruntime.
L’UCRT est désormais un composant Windows et est fourni dans le cadre de Windows 10 et versions ultérieures. L’UCRT prend en charge une ABI stable basée sur les conventions d’appel C et est conforme à la norme ISO C99, à quelques exceptions près. Il n’est plus lié à une version spécifique du compilateur. Vous pouvez utiliser l’UCRT sur n’importe quelle version de Windows prise en charge par Visual Studio 2015 ou Visual Studio 2017. Ainsi, vous n’avez plus besoin de mettre à jour vos builds pour cibler une nouvelle version du CRT avec chaque mise à niveau de Visual Studio.
Cette refactorisation a modifié les noms ou emplacements de nombreux fichiers d’en-tête CRT, fichiers bibliothèque et fichiers redistribuables, ainsi que les méthodes de déploiement requises pour votre code. De nombreuses fonctions et macros dans l’UCRT ont également été ajoutées ou modifiées pour améliorer la conformité aux normes. Pour tirer parti de ces modifications, vous devez mettre à jour vos systèmes de génération de code et de projet existants.
Où trouver les fichiers du CRT universel
En tant que composant Windows, les fichiers et en-têtes de la bibliothèque UCRT font désormais partie du SDK Windows. Quand vous installez Visual Studio, les parties du SDK Windows nécessaires pour utiliser l’UCRT sont également installées. Le programme d’installation de Visual Studio ajoute les emplacements des fichiers DLL, des bibliothèques et des en-têtes UCRT aux chemins par défaut utilisés par le système de génération de projet Visual Studio. Lorsque vous mettez à jour vos projets Visual Studio C++, s’ils utilisent les paramètres de projet par défaut, l’IDE recherche automatiquement les nouveaux emplacements des fichiers d’en-tête. Et l’éditeur de liens utilise automatiquement les nouvelles bibliothèques UCRT et vcruntime par défaut. De même, si vous utilisez une invite de commandes développeur pour effectuer des générations à partir d’une ligne de commande, les variables d’environnement qui contiennent des chemins d’en-têtes et de bibliothèques sont mises à jour et sont automatiquement opérationnelles.
Les fichiers d’en-tête de la bibliothèque standard C se trouvent désormais dans le SDK Windows, au sein d’un dossier include rattaché à un répertoire spécifique à la version du SDK. Un emplacement classique pour les fichiers d’en-tête se trouve dans le répertoire Program Files ou Program Files (x86) sous Windows Kits\10\Include\[sdk-version]\ucrt
, où [sdk-version]
correspond à une version ou à une mise à jour Windows, par exemple, 10.0.14393.0 pour la mise à jour anniversaire de Windows 10.
Les bibliothèques statiques UCRT et les bibliothèques stub de liens dynamiques se trouvent dans le répertoire Program Files ou Program Files (x86) sous Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]
, où architecture
est ARM64, x86 ou X64. Les bibliothèques statiques de vente au détail et de débogage sont libucrt.lib
et libucrtd.lib
, et les bibliothèques pour les DLL UCRT sont ucrt.lib
et ucrtd.lib
.
Les DLL UCRT commerciales et de débogage se trouvent dans des emplacements distincts. Les DLL de vente au détail sont des fichiers redistribuables et se trouvent dans le répertoire Program Files ou Program Files (x86) sous Windows Kits\10\Redist\ucrt\DLLs\[architecture]\
. Les bibliothèques UCRT de débogage ne sont pas des fichiers Redistribuables et se trouvent dans le répertoire Program Files ou Program Files (x86) sous Windows Kits\10\bin\[architecture]\ucrt
le dossier.
Où trouver les bibliothèques et en-têtes standard
La bibliothèque de prise en charge du runtime spécifique au compilateur C et C++, vcruntime
contient le code requis pour prendre en charge le démarrage du programme et les fonctionnalités telles que la gestion des exceptions et les intrinsèques. La bibliothèque et ses fichiers d’en-tête se trouvent toujours dans le dossier Microsoft Visual Studio spécifique à la version dans votre répertoire Program Files ou Program files (x86).
Dans Visual Studio 2017, 2019 et 2022, les fichiers d’en-tête sont trouvés sous Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include
. [year]
Voici la version de Visual Studio, [edition]
l’édition ou le surnom de Visual Studio, et [lib-version]
est la version de build des bibliothèques.
Les bibliothèques de liens se trouvent sous Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]
, où [year]
est la version de Visual Studio, [edition]
est l’édition ou le surnom de Visual Studio, [lib-version]
est la version de build des bibliothèques et [architecture]
est l’architecture du processeur cible. Des bibliothèques de liens pour OneCore et Store sont également présentes dans le dossier des bibliothèques.
Les versions de vente au détail et de débogage de la bibliothèque statique sont libvcruntime.lib
et libvcruntimed.lib
. Les bibliothèques stub de vente au détail et de débogage des liens dynamiques sont vcruntime.lib
et vcruntimed.lib
, respectivement.
Lorsque vous mettez à jour vos projets Visual Studio C++, si vous avez défini la propriété Éditeur de liens ignorer toutes les bibliothèques par défaut sur Oui, ou si vous utilisez l’option /NODEFAULTLIB
éditeur de liens sur la ligne de commande, vous devez mettre à jour votre liste de bibliothèques pour inclure les nouvelles bibliothèques refactorisées. Remplacez l’ancienne bibliothèque CRT, par exemple, libcmt.lib
, libcmtd.lib
ou msvcrt.lib
, par msvcrtd.lib
les bibliothèques refactorielles équivalentes. Pour plus d’informations sur les bibliothèques spécifiques à utiliser, consultez les fonctionnalités de la bibliothèque CRT.
Déploiement et redistribution du CRT universel
Étant donné que l’UCRT est maintenant un composant de système d’exploitation Microsoft Windows, il est inclus dans le cadre du système d’exploitation dans Windows 10 et versions ultérieures. Il est disponible via Windows Update pour les systèmes d’exploitation plus anciens, Windows Vista via Windows 8.1. Une version redistribuable est disponible pour Windows XP. En tant que composant du système d’exploitation, les mises à jour et maintenance de l’UCRT sont gérées par Windows Update indépendamment des versions du compilateur de Microsoft C++ et de Visual Studio. Étant donné que l’UCRT est un composant Windows, pour la sécurité et la facilité des mises à jour, et une taille d’image plus petite, nous vous recommandons vivement d’utiliser le package Redistribuable pour effectuer un déploiement central de l’UCRT pour votre application.
Vous pouvez utiliser l’UCRT sur n’importe quelle version de Windows prise en charge par Visual Studio 2015 ou version ultérieure. Vous pouvez la redistribuer à l’aide d’un vcredist
package pour les versions prises en charge de Windows avant Windows 10. Les vcredist
packages incluent les composants UCRT et les installent automatiquement sur les systèmes d’exploitation Windows qui ne les ont pas installés par défaut. Pour plus d’informations, consultez Redistribution des fichiers Visual C++.
Le déploiement local de l’application de l’UCRT est pris en charge, bien que non recommandé pour des raisons de performances et de sécurité. Les DLL pour le déploiement local d’application de l’UCRT sont incluses dans le sdk Windows, sous le redist
sous-répertoire. Les DLL requises incluent ucrtbase.dll
et un ensemble de DLL de redirecteur APISet nommées api-ms-win-[subset].dll
. Comme le jeu de DLL requis varie d’un système d’exploitation à l’autre, nous vous recommandons d’inclure toutes les DLL quand vous utilisez le déploiement local de l’application. Pour plus d’informations et des recommandations sur le déploiement local d’application, consultez Déploiement dans Visual C++.
Modifications apportées aux macros et fonctions du CRT universel
De nombreuses fonctions ont été ajoutées ou mises à jour dans l’UCRT pour améliorer la conformité à la norme ISO C99 et pour résoudre les problèmes liés à la sécurité et à la qualité du code. Dans certains cas, des modifications de la bibliothèque avec rupture ont été nécessaires. Votre code compilé correctement lors de l’utilisation d’une version antérieure du CRT peut s’interrompre lorsque vous le compilez à l’aide de l’UCRT. Si c’est le cas, vous devez modifier votre code pour tirer parti des mises à jour et fonctionnalités UCRT. Pour obtenir une liste détaillée des modifications et mises à jour avec rupture apportées à la bibliothèque CRT et disponibles dans le CRT universel, consultez la section Bibliothèque Runtime C (CRT) de l’historique des modifications de Visual C++. Elle inclut une liste des en-têtes et fonctions affectés que vous pouvez utiliser pour identifier les modifications nécessaires dans votre code.
Voir aussi
Guide du portage et de la mise à niveau de Visual C++
Vue d’ensemble des problèmes de mise à niveau potentiels (Visual C++)
Mise à niveau de projets à partir de versions antérieures de Visual C++
Historique des modifications de Visual C++ entre 2003 et 2015
Améliorations de la conformité de C++ dans Visual Studio