Características de la biblioteca CRT

Este tema describen los diferentes archivos .lib que componen las bibliotecas de tiempo de ejecución C, así como sus opciones del compilador asociado y las directivas de preprocesador.

Bibliotecas de tiempo de ejecución c (CRT)

Las siguientes bibliotecas contienen las funciones de biblioteca en tiempo de ejecución de C.

Biblioteca de tiempo de ejecución c (sin iostream o biblioteca estándar de C++)

Archivo DLL asociado

Características

Opción

Directivas de preprocesador

LIBCMT.lib

Ninguno, vínculos estáticos.

Vínculo multiproceso y estática

/MT

_MT

medio de MSVCRT.lib

msvcr110.dll

Multiproceso, dynamic link (biblioteca de importación para MSVCR110.(DLL).Tenga en cuenta que si utiliza la biblioteca estándar de C++, el programa tendrá MSVCP110.DLL para ejecutar.

/MD

_MT, _DLL

LIBCMTD.lib

Ninguno, vínculos estáticos

Vínculo de multiproceso y estática (depuración)

/MTd

_DEBUG, _MT

MSVCRTD.lib

msvcr110d.dll

Multiproceso, dynamic link (biblioteca de importación para MSVCR110D.(DLL) (depuración).

/MDd

_DEBUG, _MT, _DLL

msvcmrt.lib

Ninguno, vínculos estáticos

Biblioteca estática en tiempo de ejecución de C.Se utiliza para el código administrado o nativo mixto.

/clr

/clr:oldSyntax

 

Msvcurt.lib

Ninguno, vínculos estáticos

Biblioteca estática de tiempo de ejecución de c compilada como código MSIL puro 100%.Todo el código cumple con la especificación ECMA URT de MSIL.

/clr:pure

 

[!NOTA]

El CRT de un único subproceso (libc.lib, libcd.lib) (anteriormente el /ML o /MLd opciones) ya no está disponible.En su lugar, utilice el CRT multiproceso.Vea Rendimiento multiproceso de bibliotecas.

Si vincula el programa desde la línea de comandos sin una opción del compilador que especifica una biblioteca de tiempo de ejecución C, el vinculador use LIBCMT.LIB.Esto es diferente de las versiones anteriores de Visual C++ que utiliza LIBC.LIB, la biblioteca de un único subproceso, en su lugar.

Uso de CRT vinculada estáticamente implica que cualquier información de estado guardado en la biblioteca de tiempo de ejecución c será local a esa instancia de la biblioteca CRT.Por ejemplo, si utiliza strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l cuando se usa un CRT vinculado estáticamente, la posición de la strtok analizador es no está relacionado con la strtok estado utilizado en el código en el mismo proceso (pero en un archivo DLL o EXE diferente) que está vinculada a otra instancia de la CRT estática.Por el contrario, la biblioteca CRT vinculada dinámicamente comparte estado para todo el código dentro de un proceso que se vincula dinámicamente al CRT.Este problema no se aplica si utiliza las nuevas versiones más seguras de estas funciones; Por ejemplo, strtok_s no tiene este problema.

Debido a que una biblioteca DLL generada mediante la vinculación a un CRT estático tiene su propio estado de CRT, no se recomienda para vincular estáticamente al CRT en un archivo DLL a menos que las consecuencias de este específicamente son deseadas y entender.Por ejemplo, si se llama a _set_se_translator en un archivo ejecutable que se carga la DLL vinculados a su propio CRT estática, no se detectarán las excepciones de hardware generadas por el código en el archivo DLL por el traductor pero detectará las excepciones de hardware generadas por el código en el archivo ejecutable principal.

Si está utilizando la /clr conmutador de compilador, el código se vinculará con una biblioteca estática, msvcmrt.lib.La biblioteca estática proporciona a un servidor proxy entre el código administrado y nativo CRT.No se puede utilizar la biblioteca CRT vinculada estáticamente ( /MT o /MTd opciones) con /clr.Utilice las bibliotecas vinculadas dinámicamente (/MD o /MDd) en su lugar.

Si está utilizando la /clr:pure conmutador de compilador, el código se vinculará con la msvcurt.lib de biblioteca estática.Al igual que con /clr, no se puede vincular con la biblioteca vinculada estáticamente.

Para obtener más información sobre el uso de CRT con /clr, consulte Ensamblados mixtos (nativos y administrados); for /clr:pure, see Código puro y comprobable (C++/CLI).

Para crear una versión de depuración de la aplicación, el _DEBUG se debe definir el indicador y la aplicación debe vincularse con una versión de depuración de una de estas bibliotecas.Para obtener más información acerca del uso de las versiones de depuración de los archivos de biblioteca, consulte Técnicas de depuración de CRT.

Esta versión de Visual C++ no es compatible con el estándar C99.

Biblioteca estándar de C++

Biblioteca estándar de C++

Características

Opción

Directivas de preprocesador

LIBCPMT.LIB

Vínculo multiproceso y estática

/MT

_MT

MSVCPRT.LIB

Multiproceso, dynamic link (biblioteca de importación para MSVCP110.dll)

/MD

_MT, _DLL

LIBCPMTD.LIB

Vínculo multiproceso y estática

/MTd

_DEBUG, _MT

MSVCPRTD.LIB

Multiproceso, dynamic link (biblioteca de importación para MSVCP110D.ARCHIVO DLL)

/MDd

_DEBUG, _MT, _DLL

Nota LIBCP.LIB y LIBCPD.LIB (a través de la antigua /ML y /MLd opciones) se han quitado.Utilice LIBCPMT.LIB y LIBCPMTD.LIB en lugar de ello a través de la /MT y /MTd opciones.

Cuando se genera una versión de lanzamiento del proyecto, una de las bibliotecas de tiempo de ejecución c básicas (LIBCMT.LIB, MSVCMRT.LIB, MSVCRT.LIB) está vinculada de forma predeterminada, en función de la opción del compilador que elija (multiproceso, DLL, / CLR).Si incluye uno de los Archivos de encabezado en el código, una biblioteca estándar de C++ se enlazarán de automáticamente por Visual C++ en tiempo de compilación.Por ejemplo:

#include <ios> 

¿Cuál es la diferencia entre msvcrt.dll y msvcr110.dll?

El msvcrt.dll ahora es "DLL conocida", lo que significa que es un componente del sistema de propiedad y construida por Windows.Está diseñado para su uso futuro solamente los componentes de nivel de sistema.

¿Qué problemas existen si una aplicación utiliza msvcrt.dll y msvcr110.dll?

Si tiene un archivo .lib u .obj que necesita para vincular a msvcrt.lib, no debería tener que volver a compilarlo para trabajar con el nuevo msvcrt.lib en Visual C++.El archivo .lib u .obj podrá basarse en los tamaños, desplazamientos de campo o los nombres de función de miembro de diferentes clases de CRT o las variables y los deben todos siguen existiendo en forma compatible.Cuando vuelva a vincular contra msvcrt.lib, la imagen final EXE y DLL ahora tienen una dependencia en msvcr110.dll en lugar de msvcrt.dll.

Si tiene más de un archivo DLL o EXE, a continuación, puede tener más de un CRT, o no está utilizando diferentes versiones de Visual C++.Por ejemplo, al vincular estáticamente el CRT en varias DLL, puede presentar el mismo problema.Los desarrolladores que se produce este error con los monitores CRT estáticos ha indicado que compilar con /MD utilizar el archivo DLL de CRT.Ahora que ha cambiado el nombre de la DLL de CRT a msvcr110.dll, las aplicaciones pueden tener algunos componentes vinculados a msvcrt.dll y otros a msvcr110.dll.Si las bibliotecas DLL pasan los recursos de CRT a través del límite msvcrt.dll y msvcr110.dll, se tiene problemas con los monitores CRT que no coinciden y que deba volver a compilar el proyecto con Visual C++.

Si su programa está utilizando más de una versión de CRT, algunos atención es necesaria cuando pasando ciertos objetos CRT (por ejemplo, identificadores de archivos, configuraciones regionales y las variables de entorno) a través de límites DLL.Para que obtener más información sobre los problemas implicados y cómo resolverlos, consulte Posibles errores que pasan objetos CRT a través de los límites de DLL.

Vea también

Otros recursos

Referencia de la biblioteca en tiempo de ejecución de C