2008-08-06 12 views
31

me pregunto cómo hacer una versión de lanzamiento que incluye todos los archivos DLL necesarios en el archivo .exe para que el programa se puede ejecutar en una máquina que no se desarrollo sin tener que instalar el redistribuible de Microsoft en el equipo de destino.¿Cómo empaqueta un proyecto de Visual Studio C++ para su lanzamiento?

Sin hacer esto recibe el mensaje de error que la configuración de la aplicación no es correcto y volver a instalar.

+0

sólo tiene que utilizar un asistente de configuración como Inno Setup. Inno Setup en particular es realmente fácil de usar si todo lo que necesitas es empacar un montón de archivos. – sashoalm

Respuesta

17
  1. seleccione Proyecto -> Propiedades
  2. Seleccione Configuración -> General
  3. En el cuadro de cómo se debe vincular MFC, elegir vincular estáticamente.
  4. Elija Enlazador -> Entrada. Bajo Dependencias adicionales, añadir ninguna biblioteca que necesita su aplicación para enlazar estáticamente en.
+3

que podía estar pasando algo (no soy nada de un experto), pero después de seguir sus pasos todavía tengo que empaquetar todos * * dll 's en la carpeta exe * *. ¿No era la intención de OP tener todo empaquetado en el archivo * exe *? – Malabarba

+0

@BruceConnor.Vincular bibliotecas estáticamente las incluye en el archivo ejecutable. Lo contrario se llama enlace dinámico que permitiría al ejecutable buscar 'dll's (= biblioteca de enlaces dunamic) al inicio. – danijar

0

Se podrían buscar al enlace estático (en contraposición a enlazar dinámicamente)

No estoy seguro de cómo muchos de los MS REDISTRIBUIBLES estáticamente eslabón de.

0

Si usted está buscando para saber qué dll es su máquina de destino que falta y luego use depends.exe que solía venir con MSDev, pero también se puede encontrar here. Probar esto en algunas máquinas objetivo debería indicarle qué dll necesita empaquetar con su aplicación.

10

Es necesario configurar la biblioteca de tiempo de ejecución (Bajo C/C++ -> Generación de código) para todos los proyectos de vinculación estática, que corresponden a las siguientes configuraciones de edificio por defecto:

  • multiproceso de depuración/Release
  • Singlethreaded depuración/liberación

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

Incluso si hacer eso, dependiendo de las bibliotecas que se está usando, puede que tenga que instalar un módulo de combinación/marco/etc. Depende de si están disponibles las versiones estáticas LIB de sus dependencias.

4

Sé consciente de que Microsoft do not recommend that you static link the runtime into your project, ya que esto evita que sea atendida por actualización de las ventanas para corregir errores de seguridad críticas. También existen problemas potenciales si transfiere memoria entre sus archivos .exe y .dll principales, como si cada uno de estos enlaces estáticos en el tiempo de ejecución pudiese terminar con problemas de malloc/free mismatch.

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

La única mosca en la sopa es que es necesario incluir los archivos dos veces si está distribuyendo para una amplia gama de versiones de Windows - nuevos sistemas operativos necesitan los archivos en directorios-manifiestan definido, y los más viejos desea que todos los archivos en el directorio del programa.

Cuestiones relacionadas