Pregunta

Me pregunto cómo hacer una versión de lanzamiento que incluya todos los archivos dll necesarios en el .exe para que el programa pueda ejecutarse en una máquina que no sea de desarrollo sin tener que instalar el redistribuible de Microsoft en la máquina de destino.

Sin hacer esto, recibirá el mensaje de error que indica que la configuración de la aplicación no es correcta y que debe reinstalarla.

¿Fue útil?

Solución

  1. Elija Proyecto -> Propiedades
  2. Seleccione Configuración -> General
  3. En el cuadro que indica cómo debe vincular MFC, elija vincularlo estáticamente.
  4. Elija Vinculador -> Entrada.Bajo dependencias adicionales, agregue cualquier biblioteca que necesite para que su aplicación se vincule estáticamente.

Otros consejos

Debe configurar la biblioteca en tiempo de ejecución (en C/C++ -> Generación de código) para TODOS los proyectos con vinculación estática, lo que se correlaciona con las siguientes configuraciones de construcción predeterminadas:

  • Depuración/liberación multiproceso
  • Depuración/liberación de subproceso único

A diferencia de las versiones "DLL" de esas bibliotecas.

Incluso si hace eso, dependiendo de las bibliotecas que esté utilizando, es posible que deba instalar un módulo de combinación/marco/etc.Depende de si están disponibles versiones LIB estáticas de sus dependencias.

Sé consciente de Microsoft no recomienda vincular estáticamente el tiempo de ejecución a su proyecto., ya que esto evita que Windows Update lo revise para corregir errores de seguridad críticos.También hay problemas potenciales si está pasando memoria entre sus archivos principales .exe y .dll, ya que si cada uno de estos enlaces estáticos al tiempo de ejecución puede terminar con problemas de falta de coincidencia malloc/free.

Puede incluir las DLL con el ejecutable, sin compilarlas en el .exe y sin ejecutar la herramienta de redistribución; esto es lo que hago y parece funcionar bien.

El único inconveniente es que debe incluir los archivos dos veces si está distribuyendo para una amplia gama de versiones de Windows: los sistemas operativos más nuevos necesitan los archivos en directorios definidos por el manifiesto y los más antiguos quieren todos los archivos en el directorio del programa. .

Estarías buscando un enlace estático (en lugar de un enlace dinámico)

No estoy seguro de cuántos de los redistribuibles de MS se vinculan estáticamente.

Si está buscando saber qué dll falta en su máquina de destino, utilice depend.exe que solía venir con MSDev, pero que también se puede encontrar. aquí.Probar esto en algunas máquinas de destino debería indicarle qué archivos DLL necesita empaquetar con su aplicación.

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