x64 x32 visual versión una reciente más microsoft equipo detectado c++ windows visual-studio-2010 dll dependencies

x32 - microsoft visual c++ 2013



¿Eliminación de la dependencia MSVCR de Visual Studio 2010? (3)

Intenté Googleing esto pero no pude encontrar una solución. Estoy tratando de aprender algo de C ++ básico. Escribí un simple hola mundo:

#include <stdio.h> int main() { printf("hello, world/n"); return 0; }

Compiló perfectamente y todo! Genial, pensé, así que cargué mi máquina virtual con XP y sin paquetes de servicio instalados, luego intenté ejecutarlo. Me dijo que necesitaba el MSVCR dll. ¿Hay alguna manera de que pueda eliminar completamente esta dependencia? No quiero rellenar el programa con el dll. Quiero que se haya ido, completamente. ¿Es posible crear y ejecutar un programa que se ejecutará en XP y arriba? Gracias.


Puede vincular el tiempo de ejecución de MS estáticamente, Opciones de proyecto -> C / C ++ -> Generación de código -> Multiproceso (o Depuración multiproceso para la configuración de depuración). No debería necesitarse una DLL entonces.


Técnicamente es posible eliminar esta dependencia en C, pero no estoy seguro de que sea posible en C ++. Y en cualquier caso, no lo recomendaría . Pierdes un montón de cosas que el CRT hace por ti detrás de escena, la mayoría de las cuales no quieres tener que reinventarte de manera inferior. Para empezar, es la biblioteca de tiempo de ejecución la que realmente llama a su función main , así como también llama a los constructores y destructores para objetos C ++ globales y estáticos.

La mejor y más simple solución es probablemente cambiar la forma en que su aplicación se vincula a las bibliotecas de tiempo de ejecución. Tienes dos opciones diferentes: dinámica y estáticamente. La vinculación dinámica es más eficiente con la memoria y significa que su aplicación aprovechará cualquier corrección de errores que se realice en la biblioteca. Se basa en la DLL de tiempo de ejecución que está presente para que su aplicación se inicie. La vinculación estática realmente integra el código de la biblioteca de tiempo de ejecución en su aplicación durante la fase de enlace de la compilación. Esto significa que puede ejecutar sin distribuir el archivo DLL, pero hay advertencias importantes.

Para aplicaciones simples, es poco probable que estas advertencias sean relevantes. Cambia el estilo de enlace en uso en las opciones de tu proyecto:

  1. Haga clic derecho en el nombre de su proyecto en el Explorador de soluciones.
  2. Expanda la opción "C / C ++" en la vista de árbol de la izquierda y seleccione el elemento "Generación de código".
  3. En el cuadro combinado de la propiedad "Runtime Library", elija una de las opciones "Multi-threaded".
    Las compilaciones de depuración deberían usar "Depuración multiproceso", mientras que las compilaciones de Liberación deberían usar "Varias subprocesos".

Tenga en cuenta que, dado que está utilizando VS 2010, puede optar por vincularse dinámicamente al tiempo de ejecución y obtener todas las ventajas de hacerlo sin tener que ejecutar el instalador CRT en los equipos de destino. Todo lo que necesita es la DLL redistribuible colocada en la misma carpeta que el ejecutable de su aplicación. Esto hace que la implementación (e incluso las pruebas) sea muy simple y directa. Encontrará estas bibliotecas como parte de su instalación de Visual Studio:

/Program Files/Visual Studio x.0/VC/redist/

Y, por supuesto, las versiones de depuración del CRT nunca son redistribuibles. Como no debe distribuir versiones de depuración de su aplicación, esto no es un problema. Asegúrese de haber compilado una compilación de "Versión" (utilizando el cuadro combinado desplegable en la barra de herramientas superior), para lo cual solo necesitará las bibliotecas redistribuibles que se encuentran en el directorio anterior.

¿No puedo usar el tiempo de ejecución que viene con XP?

No hay tiempo de ejecución de C para usar que viene con cualquier versión de Windows. De hecho, Windows depende de una biblioteca de tiempo de ejecución de C, pero despliega una versión privada de esa biblioteca para su propio uso. Las aplicaciones no tienen la intención de vincularse o hacer uso de ninguna manera. Está solo para implementar todas las dependencias necesarias, y como habrá notado, no puede asumir que las máquinas de destino ya tendrán instaladas las versiones correctas.


puede eliminar la biblioteca de tiempo de ejecución molesto, haga esto:
project properties > linker > input > ignore all default libraries> yes

esto le dará tranquilidad con algunos problemas con los que debe lidiar; por ejemplo, los números de punto flotante no funcionarán, la memoria de la pila es muy pequeña (aproximadamente 3k) , no hay ayuda integrada contra desbordamientos de buffer y demás, y usted puede '' Use la biblioteca estándar sin copiar y pegarla en su proyecto.

esto también disminuirá el tamaño del .exe casi equivalente a como si estuviera hecho a mano en el ensamblaje.