Sí, libcmt es (una de varias) implementaciones de la biblioteca estándar C proporcionada con el compilador de Microsoft. Proporcionan versiones de "depuración" y de "lanzamiento" de tres tipos básicos de bibliotecas: de un solo subproceso (siempre enlazado estáticamente), de subprocesos enlazados estáticamente y de subprocesos enlazados dinámicamente (aunque, dependiendo de la versión del compilador que esté usando, algunos de ellos pueden no estar presentes).
Entonces, en el nombre "libcmt", "libc" es el nombre tradicional (más o menos) para la biblioteca C. El "mt" significa "multihilo". Una versión de "depuración" tendría una "d" agregada al final, dando "libcmtd".
En cuanto a qué funciones incluye, el estándar C (parte 7, si le importa) define un conjunto de funciones que debe proporcionar una implementación conforme (alojada). La mayoría de los proveedores (incluido Microsoft) agregan varias otras funciones (por compatibilidad, para proporcionar capacidades que las funciones estándar no abordan, etc.) En la mayoría de los casos, también contendrá bastantes funciones "internas" que utiliza el compilador pero no normalmente por el usuario final.
Si desea obtener una lista completa de las funciones en "libcmt" (para usar su ejemplo), puede abrir una de las instrucciones de comando de Visual Studio (en "Herramientas de Visual Studio", normalmente), cambie al directorio donde estaban sus bibliotecas instalado, y escriba algo como: lib -list libcmt.lib
y generará una lista ( larga ) de los nombres de todos los archivos de objetos en esa biblioteca. Esos no siempre corresponden directamente a los nombres de las funciones, pero generalmente darán una idea. Si desea ver un archivo de objeto en particular, puede usar lib -extract
para extraer uno de esos archivos de objeto, luego usar dumpbin /symbols <object file name>
para encontrar qué función (es) está (n) en ese archivo de objeto en particular.
strcpy
función de la biblioteca estándar de C, por ejemplo, tendría su implementación en la biblioteca de tiempo de ejecución, o simplemente tendría su código en archivos .c normales?Al principio, debemos entender qué es una biblioteca de tiempo de ejecución; y piense en lo que podría significar con "Microsoft C Runtime Library".
ver: http://en.wikipedia.org/wiki/Runtime_library
He publicado la mayor parte del artículo aquí porque podría actualizarse.
fuente
Solo pregunté esto y me lastimé el cerebro durante algunas horas. Todavía no encontré nada que realmente haga un punto. Todos los que escriben algo sobre un tema no pueden realmente "enseñar". Si desea enseñar a alguien, tome el lenguaje más básico que una persona entienda, para que no tenga que preocuparse por otros temas cuando maneje un tema. Así que llegué a una conclusión que parece encajar bien en todo este caos.
En el lenguaje de programación C, cada programa comienza con la
main()
función. Otros idiomas pueden definir otras funciones donde se inicia el programa. Pero un procesador no conoce elmain()
. Un procesador solo conoce comandos predefinidos, representados por combinaciones de0
y1
.En la programación de microprocesadores, al no tener un sistema operativo subyacente (Microsoft Windows, Linux, MacOS, ..), debe decirle explícitamente al procesador dónde comenzar configurando la
ProgramCounter
(PC) que itera y salta (bucles, llamadas de función) dentro del comandos conocidos por el procesador. Debe saber qué tan grande es la RAM, debe establecer la posición de la pila del programa (variables locales), así como la posición del montón (variables dinámicas) y la ubicación de las variables globales (supongo que se llamaba SSA ?) dentro de la RAM. Un único procesador solo puede ejecutar un programa a la vez.Ahí es donde entra el sistema operativo. El sistema operativo en sí es un programa que se ejecuta en el procesador. Un programa que permite la ejecución de código personalizado. Ejecuta múltiples programas a la vez cambiando entre los códigos de ejecución de los programas (que se cargan en la RAM). Pero el sistema operativo ES UN PROGRAMA, cada programa está escrito de manera diferente. Simplemente poner el código de su programa personalizado en la RAM no lo ejecutará, el sistema operativo no lo sabe. Debe llamar a las funciones del sistema operativo que registra su programa, decirle al sistema operativo cuánta memoria necesita el programa, dónde se encuentra el punto de entrada al programa (el
main()
función en caso de C). Y esto es lo que supongo que se encuentra dentro de Runtime Library, y explica por qué necesita una biblioteca especial para cada sistema operativo, porque estos son solo programas en sí mismos y tienen diferentes funciones para hacer estas cosas.Esto también explica por qué NO está vinculado dinámicamente en tiempo de ejecución como
.dll
están los archivos, incluso si se llama Biblioteca RUNTIME. La biblioteca de tiempo de ejecución debe estar vinculada estáticamente, porque se necesita al inicio de su programa. Runtime Library inyecta / conecta su programa personalizado en / a otro programa (el sistema operativo) en tiempo de ejecución. Esto realmente causa algo de cerebro ...Conclusión: la biblioteca RUNTIME es un error al nombrar. Puede que no haya habido un
.dll
(enlace en tiempo de ejecución) en los primeros tiempos y el problema de comprender la diferencia simplemente no existía. Pero incluso si esto es cierto, el nombre está mal elegido.Los mejores nombres para Runtime Library podrían ser: StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary
Espero haberlo hecho bien, para corrección / expansión. salud.
fuente
C es un lenguaje y, en su definición, no es necesario que haya funciones disponibles para usted. Sin IO, sin rutinas de matemáticas, etc. Por convención, hay un conjunto de rutinas disponibles que puede vincular a su ejecutable, pero no necesita usarlas. Sin embargo, esto es algo tan común que la mayoría de los enlazadores ya no le piden que enlace a las bibliotecas de tiempo de ejecución de C.
Hay momentos en que no los quiere, por ejemplo, al trabajar con sistemas integrados, puede ser poco práctico tener malloc, por ejemplo. Solía trabajar en la inserción de PostScript en impresoras y teníamos nuestro propio conjunto de bibliotecas de tiempo de ejecución que eran mucho más felices en los sistemas integrados, por lo que no nos molestamos con el "estándar".
fuente
La biblioteca de tiempo de ejecución es esa biblioteca que se compila automáticamente para cualquier programa C que ejecute. La versión de la biblioteca que usaría depende de su compilador, plataforma, opciones de depuración y opciones de subprocesamiento múltiple.
Una buena descripción de las diferentes opciones para las bibliotecas de tiempo de ejecución: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
Incluye aquellas funciones que normalmente no considera que necesitan una biblioteca para llamar:
Microsoft tiene una buena lista de sus funciones de biblioteca en tiempo de ejecución:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
La lista exacta de funciones variará según el compilador, por lo que para iOS obtendrá otras funciones como dispatch_async () o NSLog ().
fuente
Si utiliza una herramienta como Dependency Walker en un ejecutable compilado de C o C ++, verá que una de las DLL de las que depende es MSVCRT.DLL. Esta es la Biblioteca de Microsoft C Runtime. Si examina más a fondo MSVCRT.DLL con DW, verá que aquí es donde viven todas las funciones como printf (), put (0, gets (), atoi () etc.
fuente
Creo que la definición de Microsoft realmente significa:
fuente
Hay tres formas de la biblioteca de tiempo de ejecución C que se proporciona con el SDK de Win32:
La edición de Microsoft Visual C ++ de 32 bits también contiene estas tres formas, sin embargo, el CRT en una DLL se llama MSVCRT.LIB. La DLL es redistribuible. Su nombre depende de la versión de VC ++ (es decir, MSVCRT10.DLL o MSVCRT20.DLL). Sin embargo, tenga en cuenta que MSVCRT10.DLL no es compatible con Win32s, mientras que CRTDLL.LIB es compatible con Win32s. MSVCRT20.DLL viene en dos versiones: una para Windows NT y la otra para Win32s.
ver: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
fuente