Pregunta

¿Qué hay en la biblioteca de tiempo de ejecución de MS Visual C++?Quiero decir, lo busqué en Google y siempre encontré cosas como ayuda, la aplicación xxxx me da un error de biblioteca de tiempo de ejecución de MS Visual C++, sin explicación.

Pensé que las bibliotecas de tiempo de ejecución de Windows C vienen con Windows.¿No con VC++?Gracias.

EDITAR:Primero, gracias por las respuestas.Creo que ahora tengo una mala idea de las bibliotecas de tiempo de ejecución en Windows.Quiero decir, la primera parte, que Windows tiene internamente su API win32 y está bien, lo sabía.Además, Win32API proviene del kernel y del usuario.

Pero siempre pensé que se accede a funciones como GDI como DLL (que todavía creo que lo son).Pero pensé que incluso funciona como printf y también lo están en algún archivo de Windows.

Entonces, ¿tengo razón? Cuando sé que las funciones "simples" son como printf deben vincularse directamente y luego usar solo la parte del kernel del sistema operativo directamente, y las funciones API de Windows más sofisticadas están vinculadas como archivos DLL, por lo tanto, ¿NO SE distribuyen con el compilador sino con el sistema operativo?¿Y posteriormente acceden a Kernel?

Quiero decir, digamos GDI, le digo que haga un dibujo, hace todo el trabajo duro en modo usuario y luego llama a la función del kernel que lo pone todo en framebuffer.

Y último pensamiento, ¿por qué esto se resuelve de esta manera?Quiero decir, si el tiempo de ejecución de VC++ es solo una capa entre C y WinAPI, ¿por qué VC++ no puede llamar directamente a WinAPI?

¿Fue útil?

Solución

Una breve respuesta sería que el MSVS C / C ++ funciones de tiempo de ejecución implementos como malloc / libre, stdio, iostream y algunos c ++ - cosas por el estilo moldeado dinámico y manejo de excepciones. Estos difiere entre las versiones de Visual Studio, por lo que hay diferentes tiempos de ejecución para diferentes versiones.

barco

Windows en su mayoría con un API C (el API Win32), que en lugar diferente de la / C ++ biblioteca estándar C. El MSVS C / C ++ en tiempo de ejecución llamadas a esta API para asignar memoria, etc, etc.

(supongo que algunas de las aplicaciones incluidas con Windows están escritos con MSVS y en C ++, para que no incluyen el tiempo de ejecución MSVS para esa versión.)

Además, el tiempo de ejecución cambia a medida que nuevas versiones de Visual Studio son liberados. Una versión de Windows dura mucho más que eso.

Otros consejos

Esta es una simplificación excesiva, pero le dará una idea general.MSVCRT es un conjunto de DLL que implementa partes del lenguaje C++.Funciones como printf, memcpy y similares se implementan en estas DLL.

Cada programa que se compila con un compilador particular y se vincula dinámicamente a los tiempos de ejecución de C++ debe tener de alguna manera la versión correcta de los binarios CRT en la máquina de destino.Como resultado, las aplicaciones que se envían a los usuarios finales a menudo (¿normalmente?) también se envían con un paquete de estas DLL.Este paquete se denomina "redistribuible" (o "redist") y hay uno diferente para cada combinación de versión exacta del compilador y plataforma de destino.Por ejemplo, existen redists separados y distintos para cada uno de los siguientes:

  • MSVC 10, ventanas de 64 bits
  • MSVC 10, ventanas de 32 bits
  • MSVC9, ventanas de 64 bits
  • MSVC9 SP1, ventanas de 64 bits

etcétera.

Sí, Windows normalmente "viene con" alguna versión de CRT.Sin embargo, viene con las versiones que necesita para ejecutar las aplicaciones que vienen con Windows.Si Windows y todas sus aplicaciones se compilaron en MSVC8 SP2 y su aplicación está compilada en MSVC10, el CRT require no estará presente en la caja simplemente porque ejecuta Windows.

Es por eso que es una práctica común enviar aplicaciones junto con los redists.

EDITAR:

Por arte de magia de Houdini, predigo que su próxima pregunta será "¿de dónde consigo los redistas?"

La respuesta es, de MicroSoft.Pruebe una búsqueda en Google de "msvc 9 x64 redist" y encontrará:

http://www.microsoft.com/downloads/en/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&displaylang=en

Son las bibliotecas que implementan las funciones de la biblioteca estándar ++ la C y C. funciones estándar como printf se implementan en estas bibliotecas.

Las bibliotecas del núcleo de Windows sólo proporcionan interfaces para las llamadas al sistema, es decir, el Win32 API , ya que es todo lo que necesita para construir una aplicación con todas las funciones de Windows. El VC ++ bibliotecas son en su mayoría envolturas alrededor de esta API, y son análogos al href="http://en.wikipedia.org/wiki/GNU_C_Library" rel="nofollow"> glibc biblioteca en Linux.

Como ejemplo, malloc de la fuerza biblioteca C a su vez el uso de la VirtualAlloc API para asignar memoria.

Los programas compilados con Visual C ++ requiere un "tiempo de ejecución" - esto es un poco de código que inicio de la aplicación asas / apagado, la asignación de memoria / cancelación de asignación, el apoyo a la lectura y escritura de archivos, etc.

.

Esto no es parte del sistema operativo, y no forma parte de la aplicación final -. Debido a que todas las aplicaciones C ++ puede compartirlo, por defecto el tiempo de ejecución es una instalación independiente

Además, cada versión de Visual C ++ tiene su propio instalador en tiempo de ejecución, ya que con cada versión hay ligeras diferencias y mejoras en la forma en que funciona todo esto. También hay diferentes verisons del tiempo de ejecución para diferentes plataformas (por ejemplo, x86 y x64)

Por lo tanto, hay una serie de "Estudio XXXX instalador visual en tiempo de ejecución (YYY)" descargas de Microsoft, donde el XXXX es la versión de Visual Studio (2005, 2008, 2010, etc), y YYY es por lo general "x 86" o "x 64".

La mayoría de las aplicaciones que necesitan el tiempo de ejecución se instalará automáticamente si es necesario, por lo general, los usuarios finales no son muy conscientes de estos redistributables.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top