Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Fonctions des bibliothèque CRT

Cette rubrique décrit les différents fichiers .lib qui impliquent les bibliothèques Runtime C ainsi que leurs options du compilateur et directives de préprocesseur associées.

Les bibliothèques suivantes contiennent les fonctions de bibliothèque Runtime C.

Bibliothèque Runtime C (sans bibliothèque iostream standard ou C++)

DDL associé

Caractéristiques

Option

Consignes de préprocesseur

libcmt.lib

Aucun, lien statique.

Multithread, lien statique

/MT

_MT

msvcrt.lib

msvcr110.dll

Multithread, lien dynamique (bibliothèque d'importation pour MSVCR110.DLL). Sachez que si vous utilisez la bibliothèque C++ Standard, votre programme aura besoin de MSVCP110.DLL pour s'exécuter.

/MD

_MT, _DLL

libcmtd.lib

Aucun, lien statique

Multithread, lien statique (Debug)

/MTd

_DEBUG, _MT

msvcrtd.lib

msvcr110d.dll

Lien dynamique multithread (bibliothèque d'importation pour MSVCR110D.DLL) (debug).

/MDd

_DEBUG, _MT, _DLL

msvcmrt.lib

Aucun, lien statique

Bibliothèque statique du runtime C. Utilisé pour code managé/natif mixte.

/clr

/clr:oldSyntax

 

msvcurt.lib

Aucun, lien statique

Bibliothèque statique runtime C compilée comme 100% code pur de MSIL. Tout le code est conforme à la norme ECMA URT pour le MSIL.

/clr:pure

 

Remarque Remarque

Le CRT monothread (libc.lib, libcd.lib) (anciennement /ML ou les options /MLd ) n'est plus disponible. Utilisez plutôt le multithread CRT. Consultez Performances des bibliothèques multithread.

Si vous liez votre programme depuis la ligne de commande sans option du compilateur qui spécifie la bibliothèque Runtime C, l'éditeur de liens utilise LIBCMT.LIB. C'est différent des versions antérieures de Visual C++ qui utilisaient LIBC.LIB, la bibliothèque monothread, à la place.

Utilisation du CRT liée statiquement implique que les informations d'état stockées par la bibliothèque Runtime C sont locales à cette instance du CRT. Par exemple, si vous utilisez strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l en utilisant un CRT lié de manière statique, la position de l'analyseur strtok n'est pas lié à l'état de strtok utilisé dans le code dans le même processus (mais dans une DLL ou un EXE différent) qui est lié à une autre instance du CRT statique. En revanche, l'état CRT lié de manière dynamique partage l'état pour tout code dans un processus lié dynamiquement le CRT. Cette restriction ne s'applique pas si vous utilisez les nouvelles versions plus sécurisées de ces fonctions ; par exemple, strtok_s n'a pas ce problème.

Comme une DLL générée par la liaison à une méthode statique CRT a son propre état CRT, il n'est pas recommandé de lier statiquement au CRT dans une DLL à moins que les conséquences de ce lien sont spécifiquement désirées et comprises. Par exemple, si vous appelez _set_se_translator dans un fichier exécutable qui charge la DLL lié à sa propre statique CRT, aucune exception de matériel générée par le code dans la DLL n'est interceptée par le traducteur, mais les exceptions de matériel générées par le code dans le fichier exécutable principal sont interceptées.

Si vous utilisez le commutateur de compilation en /clr, votre code sera lié avec une bibliothèque statique, msvcmrt.lib. La bibliothèque statique fournit un proxy entre le code managé et le code natif CRT. Vous ne pouvez pas utiliser le CRT lié de manière statique ( /MT ou des options /MTd ) avec /clr. Utilisez les bibliothèques liées dynamiquements (/MD ou /MDd) à la place.

Si vous utilisez le commutateur de compilation en /clr:pure, votre code sera lié avec la bibliothèque statique, msvcmrt.lib. Comme avec /clr, vous ne pouvez pas créer de liaison avec la bibliothèque liée.

Pour plus d'informations sur l'utilisation du CRT avec /clr, consultez Assemblys mixtes (natif et managé); pour /clr:pure, consultez Code pur et vérifiable (C++/CLI).

Pour générer une version Debug de votre application, l'indicateur _DEBUG doit être défini et l'application doit être liée à une version Debug d'une de ces bibliothèques. Pour plus d'informations sur l'utilisation des versions Debug des fichiers bibliothèques, consultez Techniques de débogage CRT.

Cette version de Visual C++ n'est pas conforme au standard C99.

Bibliothèque C++ standard

Caractéristiques

Option

Consignes de préprocesseur

LIBCPMT.LIB

Multithread, lien statique

/MT

_MT

MSVCPRT.LIB

Lien dynamique à threads multiples (bibliothèque d'importation pour MSVCP110.dll)

/MD

_MT, _DLL

LIBCPMTD.LIB

Multithread, lien statique

/MTd

_DEBUG, _MT

MSVCPRTD.LIB

Lien dynamique à threads multiples (bibliothèque d'importation pour MSVCP110D.DLL)

/MDd

_DEBUG, _MT, _DLL

Notez  LIBCP.LIB et LIBCPD.LIB (via /ML et les options /MLd anciens) ont été supprimées. Utilisez LIBCPMT.LIB et LIBCPMTD.LIB à la place via /MT et les options /MTd.

Lorsque vous générez une version Release de votre projet, l'une des bibliothèques de base du runtime C (LIBCMT.LIB, MSVCMRT.LIB, MSVCRT.LIB) est liée par défaut, selon l'option du compilateur choisie (multithread, dll, /clr). Si vous incluez un Fichiers d'en-tête de bibliothèque standard C++ dans votre code, une bibliothèque C++ standard est liée automatiquement par Visual C++ au moment de la compilation. Par exemple :

#include <ios> 

Le msvcrt.dll est maintenant « une DLL connu, » signifiant que c'est un composant système possédé et créé par Windows. Il est destiné à une utilisation ultérieure pour les composants du système uniquement.

Si vous avez un fichier .lib ou .obj qui doit être lié à msvcrt.lib, vous ne devez pas avoir le recompiler pour utiliser la nouvelle msvcrt.lib dans Visual C++. Le fichier .lib ou .obj peut dépendre des tailles, des offsets de champ, ou des noms de fonction membre de plusieurs classes CRT ou de variables, ceux-ci doivent toutes encore exister de façon compatible. Lorsque vous reconnectez contre msvcrt.lib, votre image finale EXE et de DLL affiche maintenant une dépendance sur msvcr110.dll au lieu de msvcrt.dll.

Si vous avez plusieurs DLL ou EXE, vous pouvez avoir plusieurs CRT, que vous utilisez des versions différentes de Visual C++ ou non. Par exemple, lier statiquement la liaison du CRT en plusieurs DLL peut présenter le même problème. Les développeurs rencontrant ce problème avec des CRT staiques ont été chargés de compiler avec /MD pour utiliser la DLL CRT. Maintenant que la DLL CRT a été renommé en msvcr110.dll, les applications peuvent contenir des composants liés à msvcrt.dll et d'autres à msvcr110.dll. Si vos DLL passent des ressources CRT à travers la limite du msvcrt.dll et de msvcr110.dll, vous rencontrez des problèmes avec les CRT incompatibles et devrez recompiler votre projet avec Visual C++.

Si votre programme utilise plusieurs versions du CRT, une certaine attention est nécessaire en passant certains objets CRT (comme vos handles de fichiers, vos paramètres régionaux et vos variables d'environnement) au delà des limites de DLL. Pour plus d'informations sur les problèmes impiqués et leurs résolutions possibles, consultez Erreurs potentielles de passage d'objets CRT entre frontières DLL.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft