2009-06-18 22 views
54

Estoy intentando implementar (lanzar al público) una aplicación de qt simple que realicé recientemente, pero me atasqué en enlaces estáticos qt libs.Enlace estático de Qt e implementación

Seguí la guía en qt docs para volver a compilar qt y mi aplicación estáticamente. Pero la versión de lanzamiento todavía requiere qtgui/qtcore dll sin razones aparentes, me pregunto si alguien ha visto este tipo de problemas antes. ¿O mejor aún, lo ha resuelto con éxito?

http://doc.qtsoftware.com/4.5/deployment-windows.html

+1

tiene copias estáticas de QtCore4.a, QtGui4.a? Entonces, agregar '' 'CONFIG + = static''' resolvería esto. Si no tienes una copia estática de Qt, ve a buscar el origen y la compilación. Lleva varias horas obtener libs estáticas. –

Respuesta

0

hay que añadir CONFIG + = estática a su archivo .pro. si eso no funciona bien, debe proporcionar más información.

+6

Esto es incorrecto. Dicha bandera de configuración no hace nada. –

40

escribí a guide to static linking

y How to build Qt static with multiple compilers and keep it small

(ya que puede ser bastante grande, especialmente para programas sencillos). Es posible que también desee consultar el instalador de BitRock, que es gratuito para proyectos de código abierto.

En resumen, resulta ser un poco más complejo si está utilizando algo que Qt considere como un complemento, como soporte para la mayoría de los tipos de imágenes (JPEG, GIF) o bases de datos. Por ejemplo, si desea incluir soporte para Oracle DBMS y GIF para sus iconos, se agrega el siguiente a su archivo .PRO:

QTPLUGIN += qsqloci qgif 
CONFIG += static 

A continuación, tendrá que:

#include <QtPlugin> 

en su proyecto, e importe los complementos utilizados. Debe volver a cambiar estas configuraciones para que vuelva a compilarse con vínculos dinámicos (como al depurar o agregar funciones), aunque esto se puede automatizar fácilmente. También hay consideraciones al construir las bibliotecas Qt para su uso con enlaces estáticos, aunque las instrucciones Qt al menos te ayudarán a comenzar.

+12

Tenga en cuenta los problemas de licencia si enlaza estáticamente. – Lisa

+5

Enlace roto ... – Jared

+4

Bueno arregle los enlaces, ahora su respuesta es un poco inútil ... – Veger

6

Además, tenga en cuenta que su construcción estática todavía se vinculará de forma dinámica con los tiempos de ejecución del estudio visual.

Ver this faq (internet archive link, in case the link goes away):

¿Por qué utiliza una Qt estáticamente construyeron las bibliotecas dinámicas en tiempo de ejecución de Visual Studio? ¿Debo implementarlos con mi aplicación?

Qt se crea utilizando el conmutador -MD (d), que se vincula con las bibliotecas dinámicas de tiempo de ejecución de C/C++. Esto es necesario ya que hemos experimentado problemas de memoria al usar cualquier cosa que no sea el distintivo -MD (d) y, en general, se recomienda su uso. No debe modificar esta bandera usted mismo para su aplicación, ya que entra en conflicto con la forma en que se construye la biblioteca Qt si cambia la bandera a -MT. Tampoco debería cambiarlo por Qt, ya que es probable que cause problemas.

Qt todavía se construye estáticamente cuando se usa la opción -static, lo que significa que no necesita distribuir los dll de Qt al implementar su aplicación. Sin embargo, deberá distribuir los tiempos de ejecución de C (si aún no existen en la máquina de destino), consulte nuestra documentación de implementación http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies.

12

Con Qt 5.5, las cosas son bastante fáciles.Hay siguientes ajustes ortogonales que se pasan a la hora de construir configure Qt:

  1. ¿Quieres una biblioteca Qt estática?

    opción

    -static se debe pasar a configure

  2. ¿Quieres que la acumulación de Qt, y de su aplicación, para usar un tiempo de ejecución C++ estática?

    opción

    -static-runtime se debe pasar a configure

  3. es lo que quieres de orientación XP?

    opción

    -target xp se debe pasar a configure

    Además, siga las instrucciones de this blog post.

    Qt Creator no admitía la segmentación de XP automágicamente al menos hasta v.3.5.0 ya que no configura adecuadamente el entorno para las herramientas de compilación. Debe modificar el entorno de compilación manualmente per the blog post.

+0

'configure' == CONFIG? – user2962533

+2

@ user2962533 No, esto se trata de la secuencia de comandos 'configure' que ejecuta antes de compilar Qt. –

1

simplemente he recopilado una aplicación de forma estática (depuración) con QT plugins (5.9), con VS (2015) (Win).

a) Agregue a su código.

#include <QtPlugin> 
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

b) Añadir lo siguiente a los caminos de enlace

\5.9.0_x86_static_install\lib 
\5.9.0_x86_static_install\bin 
\5.9.0_x86_static_install\plugins 
\5.9.0_x86_static_install\plugins\platforms 
\5.9.0_x86_static_install\plugins\imageformats 

c) Añadir la lista de bibliotecas estáticas QT y bibliotecas internas VS a su lista de enlace.

version.lib 
imm32.lib 
shlwapi.lib 
rpcrt4.lib 
Ws2_32.lib 
Mpr.lib 
Netapi32.lib 
Rpcrt4.lib 
Iphlpapi.lib 
winmm.lib 
gdi32.lib 
advapi32.lib 
msimg32.lib 
UxTheme.lib 
translatord.lib 
preprocessord.lib 
d3d9.lib 
dxguid.lib 
libEGLd.lib 
libGLESv2d.lib 
iphlpapi.lib 
psapi.lib 
ws2_32.lib 
Dwmapi.lib 
Qt5CoreD.lib 
Qt5Guid.lib 
Qt5Xmld.lib 
Qt5Widgetsd.lib 
Qt5Networkd.lib 
Qt5Winextrasd.lib 
Qt5PlatformCompositorSupportd.lib 
qicod.lib 
qtmaind.lib 
qtlibpngd.lib 
qtharfbuzzd.lib 
qtpcre2d.lib 
qwindowsd.lib 
Qt5FontDatabaseSupportd.lib 
Qt5ThemeSupportd.lib 
Qt5EventDispatcherSupportd.lib 
Qt5AccessibilitySupportd.lib 
qtfreetyped.lib 

Kevin Higgins

2

msys2 tiene un pre-construidos static Qt5 package

... que, usando CMake, cuando la propiedad CMAKE_AUTOSTATICPLUGINS objetivo se fija, también vincula todos los plugins disponibles. (esto, actualmente, solo está habilitado mediante parches de descarga, no oficial, pero alcanza el objetivo)

Si utiliza qmake esto al menos le ahorra el esfuerzo de construirlo usted mismo.

+0

Quiero usar esto, pero no estoy seguro de cómo configurar CMAKE_AUTOSTATICPLUGINS. Estoy usando qmake y luego hago. ¿Puedes aconsejar? – tofutim

+0

¿Ha mal escrito 'qmake' allí ya que se trata de CMake aquí. Puede configurarlo globalmente: 'set (CMAKE_AUTOSTATICPLUGINS ON)' o como una propiedad específica del objetivo: 'set_target_properties ($ {PROJECT_NAME} PROPERTIES AUTOSTATICPLUGINS ON)'. – Darklighter

Cuestiones relacionadas