Qt静态链接和部署

我试图部署(发布到公众)一个简单的QT应用程序,我最近做的,但卡在静态链接QT库。

我按照qt文档指南来重新构buildqt和我的应用程序静态。 但发布版本仍然需要qtgui / qtcore dll没有明显的原因,不知有没有人见过这种types的问题? 甚至更好,已经成功解决了吗?

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

我写了一个静态链接指南

以及如何使用多个编译器来构buildQt静态并保持较小

(因为它可以变得相当大,特别是对于简单的程序)。 您可能还想看看BitRock安装程序,这对于开源项目是免费的。

简而言之,如果你使用任何Qt认为插件的东西,比如支持大多数图片types(JPEG,GIF)或数据库,结果会变得更复杂一些。 例如,如果要为图标包含对Oracle DBMS和GIF图像的支持,请将以下内容添加到.PRO文件中:

 QTPLUGIN += qsqloci qgif CONFIG += static 

您将需要:

 #include <QtPlugin> 

在你的项目中,并导入任何使用的插件。 您需要将这些设置更改回来,以便再次进行dynamic链接编译(如debugging或添加function时),但这可以很容易地自动化。 在构build用于静态链接的Qt库时也有一些注意事项,尽pipeQt指令至less可以帮助您开始。

使用Qt 5.5,事情很简单。 有以下正交设置,您在构buildQt时通过configure

  1. 你想要一个静态的Qt库吗?

    应该通过-static选项来configure

  2. 你想让Qt和你的应用程序的构build使用静态C ++运行时?

    应该传递-static-runtime选项来configure

  3. 你想要XP定位?

    -target xp选项应该通过configure

    另外,请按照此博客文章的指示。

    Qt Creator不支持XP自动定位到v.3.5.0,因为它没有正确设置构build工具的环境。 您必须根据博客文章手动修改构build环境。

此外,请注意,您的静态构build仍将dynamic链接到Visual Studio运行时!

看到这个常见问题 ( 互联网档案链接,万一链接消失 ):

为什么一个静态构build的Qt使用dynamic的Visual Studio运行时库? 我需要使用我的应用程序部署这些吗?

Qt是使用-MD(d)开关构build的,该开关链接到dynamicC / C ++运行时库。 这是必要的,因为我们在使用除-MD(d)标志之外的任何东西时遇到过内存问题,一般来说,build议使用这个标志。 你不应该为你的应用程序自己改变这个标志,因为如果你把标志改成-MT,它与Qt库的构build方式是冲突的。 Qt也不应该改变它,因为它很可能会导致问题。

当使用-static选项时,Qt仍然是静态构build的,这意味着在部署应用程序时不需要分发Qt dll。 您将不得不分发C运行时(如果它们不在目标机器上),请参阅我们的部署文档http://doc.qt.io/qt-5/deployment-windows.html#application-dependencies

我刚刚用QT插件(5.9),VS(2015)(Win),静态编译应用程序(debugging)。

a)添加到您的代码。

 #include <QtPlugin> Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

b)将以下内容添加到链接path中

 \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)将QT静态库和内部VS库列表添加到链接列表中。

 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 

凯文Higgins

msys2有一个预先build立的静态Qt5包

…当使用CMake时, CMAKE_AUTOSTATICPLUGINS目标属性被设置,也链接所有可用的插件。 (目前这只能通过下游补丁来启用,非官方的,但是达到了目标)

如果你使用qmake,至less可以省去你自己构build它的工作。

你必须添加CONFIG + = static到你的.pro文件。 如果这不起作用,你必须提供更多的信息。