¿Cómo empaquetar un proyecto de visual studio c++ para su lanzamiento?


Me pregunto cómo hacer una compilación de lanzamiento que incluya todos los archivos dll necesarios en el .exe por lo que el programa se puede ejecutar en una máquina no de desarrollo sin tener que instalar el redistributable de Microsoft en la máquina de destino.

Sin hacer esto, se obtiene el mensaje de error que indica que la configuración de la aplicación no es correcta y que debe reinstalarse.

Author: DShook, 2008-08-06

5 answers

  1. Elija Proyecto - > Propiedades
  2. Seleccione Configuración - > General
  3. En el cuadro de cómo debe vincular MFC, elija vincularlo estáticamente.
  4. Elija Enlazador -> Entrada. En Dependencias adicionales, agregue las bibliotecas que necesite que su aplicación vincule estáticamente.
 17
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 16:41:15

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

  • Depuración/liberación multiproceso
  • Depuración/liberación de un solo hilo

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

Incluso si lo hace, dependiendo de las bibliotecas que esté utilizando, es posible que tenga que instalar un Módulo Merge/framework/etc. Depende de si la LIB estática las versiones de sus dependencias están disponibles.

 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-07 21:11:52

Tenga en cuenta que Microsoft no recomienda que vincule estáticamente el tiempo de ejecución a su proyecto, ya que esto evita que windows update lo mantenga para corregir errores de seguridad críticos. También hay problemas potenciales si usted está pasando la memoria entre su principal .exe y .archivos dll como si cada uno de estos enlaces estáticos el tiempo de ejecución puede terminar con malloc / problemas de desajuste libre.

Puede incluir los archivos DLL con el ejecutable, sin compilarlos en el .exe y sin ejecutar la herramienta redist-esto es lo que hago y parece funcionar bien.

La única mosca en el ungüento es que usted necesita incluir los ficheros dos veces si usted está distribuyendo para una amplia gama de versiones de Windows - los OSs más nuevos necesitan los ficheros en directorios definidos manifiesto, y los más viejos quieren todos los ficheros en el directorio del programa.

 4
Author: Simon Steele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 11:41:09

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

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

 0
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-06 12:10:55

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

 0
Author: David Sykes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-07 06:40:28