windows - error - Qt enlace e implementación estáticos
qt platform plugin windows (6)
Estoy intentando implementar (lanzar al público) una simple aplicación qt que realicé recientemente, pero me quedé atrapado en enlaces estáticos qt libs.
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?
Acabo de compilar una aplicación estáticamente (depuración) con QT Plugins (5.9), con VS (2015) (Win).
a) Agregue a su código.
#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);
b) Agregue lo siguiente a las rutas 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) Agregue la lista de bibliotecas estáticas QT y bibliotecas VS internas a su lista de enlaces.
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
Además, tenga en cuenta que su construcción estática todavía se vinculará dinámicamente a los tiempos de ejecución del estudio visual.
Consulte este faq ( enlace al archivo de Internet, en caso de que el enlace desaparezca ):
¿Por qué un Qt construido estáticamente usa las bibliotecas dinámicas de tiempo de ejecución de Visual Studio? ¿Debo implementarlos con mi aplicación?
Qt se genera 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.
Sin embargo, Qt todavía se construye de forma estática cuando se utiliza la opción -static, lo que significa que no es necesario distribuir los dlls 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 .
Con Qt 5.5, las cosas son bastante fáciles. Existen los siguientes ajustes ortogonales que debe pasar para configure
al construir Qt:
¿Quieres una biblioteca de Qt estática?
-static
opción-static
debe pasar paraconfigure
¿Desea que la compilación de Qt y de su aplicación utilice un tiempo de ejecución estático de C ++?
-static-runtime
option se debe pasar paraconfigure
¿Quieres la orientación de XP?
-target xp
opción se debe pasar paraconfigure
Además, siga las instrucciones de esta publicación de blog .
Qt Creator no admitía la segmentación de XP automágicamente al menos hasta v.3.5.0 ya que no configura el entorno para las herramientas de compilación correctamente. Debe modificar el entorno de compilación manualmente según la publicación del blog .
Escribí una guía para enlaces estáticos
y Cómo construir Qt estático con múltiples compiladores y mantenerlo pequeño
(porque puede ser bastante grande, especialmente para programas simples). También puede 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 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 e imágenes GIF para sus iconos, agregue lo siguiente a su archivo .PRO:
QTPLUGIN += qsqloci qgif
CONFIG += static
Entonces necesitarás:
#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.
debe agregar CONFIG + = static a su archivo .pro. si eso no funciona bien, debe proporcionar más información.
msys2 tiene un paquete qt5 estático preconstruido
... que, utilizando CMake, cuando se establece la propiedad de destino CMAKE_AUTOSTATICPLUGINS
, también vincula todos los complementos disponibles. (esto, actualmente, solo se habilita a través de parches indirectos, no oficiales, pero alcanza el objetivo)
Si usa qmake esto al menos le ahorra el esfuerzo de construirlo usted mismo.