2011-11-29 21 views
13

He estado buscando en Internet alguna información útil y clara sobre esto, es molesto que algo tan trivial sea tan difícil de hacer.¿Cómo crear un archivo ejecutable para una aplicación Qt?

Lo que necesito es crear un archivo ejecutable para mi proyecto Qt, para poder ejecutarlo en otras computadoras. Mi proyecto funciona muy bien en Qt Creator, pero cuando trato de ejecutar el ejecutable creado en la carpeta de versiones, me faltan errores acerca de dll y, aunque los puse todos en el mismo directorio de mi .exe, ahora tengo algunos errores sobre los puntos de entrada en los procedimientos dentro de la DLL (QtCore4.dll).

La solución parece ser un enlace estático, he encontrado mucha información al respecto, pero ninguno de ellos realmente me ayudó. Esto es lo que he intentado hasta ahora:

  • Utilizando el ejecutable creado en la carpeta de lanzamiento como dije anteriormente.
  • Enlace estático, siguiendo este tutorial (y muchos otros, casi todos lo mismo): http://doc.qt.io/qt-4.8/deployment-windows.html pero aparece el siguiente error durante el "configure -static": NMAKE: error fatal U1077: '"c: \ Arquivos de programas \ Microsoft Visual Studio 9. 0 \ VC \ BIN \ cl.EXE "': código de retorno' 0x2 ' Detener. qmake Edificio falló, código de retorno 2

Para que no podía encontrar ninguna solución, así que aquí estoy, tratando de crear un archivo ejecutable para mi proyecto Qt, espero que ustedes me puede dar algo de luz aquí .

+0

Ver esta pregunta relacionada http://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment/1654833#1654833 –

+0

lo he encontrado antes, pero me dio el error NMAKE: fatal error U1077: '"c: \ Arquivos de programas \ Microsoft Visual Studio 9. 0 \ VC \ BIN \ cl.EXE"': código de retorno '0x2' Detener. El edificio qmake falló, el código de retorno 2 Cuando trato de ejecutar la configuración, y no puedo encontrar una respuesta a eso ... Pero gracias. –

Respuesta

14

Básicamente, debe buscar la subcarpeta mingw en el árbol de qt, donde residen las utilidades de qt, y copiar las dll necesarias.

Estos son los pasos que sigo, basados ​​en QT 4.7.4, para empaquetar la aplicación con las bibliotecas compartidas correctas.

  1. Digamos que usted ha instalado QT en c: \ qtsdk
  2. abrir el proyecto, y compilarlo en modo de lanzamiento.
  3. Vaya a este directorio: C: \ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin - contiene todas las bibliotecas compartidas. Depuración bibliotecas terminan con una "d" - Frex, QtCore.dll es versión de lanzamiento, mientras que QtCoreD.dll es la versión de depuración
  4. Copia al menos estos archivos en el directorio de liberación (donde sus mentiras .exe)

    • mingwm10.dll
    • libgcc_s_dw2-1.dll
    • QtCore4.dll
    • QtGui4.dll

    Acabo de construir, probar e implementar un proyecto ficticio de esta manera.

+1

No tengo ese directorio (mingw \ bin), probablemente porque estoy usando Visual Studio? De todos modos, copie TODOS los archivos dll desde allí a mi archivo .exe y funcionó. No es la mejor solución pero funcionará por ahora. Gracias. –

+1

Puede comenzar a eliminar los archivos dll uno por uno y verificar si el programa todavía se está ejecutando. De esta forma, puede averiguar fácilmente cuáles son necesarios. Eso es lo que suelo hacer cuando trato con dependencias de DLL. – sashoalm

+0

No sé si configura el archivo .PRO en VS2008, pero algunas características de qt requieren su propia dll. (QtSql, etc.). La mayoría de las veces estará bien utilizando solo QtCore.dll y QtGui.dll. Cuando utiliza funciones avanzadas como comunicación de red, sql, webkit y similares, compruebe los documentos: es probable que obtenga punteros a la biblioteca utilizada. También puede usar Dependency Walker para ver qué DLL necesita su ejecutor. –

1

Así ha descargado Qt SDK y desea vincular las bibliotecas Qt estáticamente en que la aplicación, ¿verdad?

En primer lugar, si enlaza estáticamente, no necesita ningún Qt * .dll para estar presente en ninguna parte, ya que está integrado en la aplicación. Así que eso solo significa que su aplicación está construida usando enlaces dinámicos.

Desde mi experiencia, de esa manera más segura de ponerlo todo en marcha es:

Descarga fuentes de Qt, construir e instalar con nmake (usando Visual Studio comando de menú Inicio -> Aplicaciones -> Visual Studio 2008) . Solo recuerde que el tamaño de la aplicación estáticamente vinculada depende del tamaño de las * .libs y éstas dependen de la configuración previa a la compilación, por ejemplo, puede minimizar el tamaño de su aplicación al desactivar algunas funciones (esto es un ejemplo de configuración para MacOSX, sólo ten cuidado con las específicas para Windows y añadir plaftorm adecuada - ver configure.exe --help para más detalles):

./configure -arch x86 -platform macx-g++ --universal -cocoa -debug-and-release -opensource -static -fast -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -qt-zlib -no-gif -no-libmng -qt-libmng -no-libtiff -qt-libjpeg -no-3dnow -sse -no-sse2 -no-openssl -no-dbus -no-phonon -no-multimedia -no-audio-backend -webkit -no-script -no-scripttools -no-declarative -nomake demos -nomake examples -no-exceptions -no-accessibility -confirm-license 

instalar, configurar y utilizar Visual Studio add-In para su proyecto Qt (here) .

¡Buena suerte! :)

+0

Tenga en cuenta que la vinculación estática requiere una licencia o que su código sea de origen abierto. – paulm

+0

@paulm ¿Por qué la vinculación estática requiere licencia? ¿Es esto de Qt específico? (Soy nuevo, por lo que pregunto) – inblueswithu

+0

Es lo que exige la licencia LGPL/GPL, busque aquí en SO para encontrar los detalles – paulm

2

Esto es lo que hice y lo tengo a funcionar después de un tiempo; después de asegurarse de que su programa se construye dentro de Qtcreator, vaya al directorio que contiene su exe y haga doble clic en él. (Estoy usando Windows y no sé si es igual en otras plataformas). Debería aparecer una ventana que indica qué .dll falta. Vaya al directorio donde Qt está instalado y escriba el nombre exacto en la barra de búsqueda (arriba a la derecha en Windows 7) y el dll debería aparecer en los resultados de búsqueda. Haga clic derecho y elija abrir ubicación de archivo. Copie el archivo donde se encuentra su exe. Haga doble clic en el exe nuevamente. Si falta otro .dll repita la misma operación hasta que no haya ninguno faltante.Al final su programa debería ejecutarse. Espero que esto ayude.

Cuestiones relacionadas