更新:使用windeployqt.exe
!它真的很好用。
http://doc.qt.io/qt-5/windows-deployment.html#the-windows-deployment-tool
使用 windeployqt 的最简单方法是将 Qt 安装的 bin 目录(例如 )添加到 PATH 变量中,然后运行:
windeployqt <path-to-app-binary>
更新:经过进一步测试,windeployqt
没有为我复制所有的 MingW dll。(在带有 MingW 4.9.1 的 Windows 10 上使用 Qt 5.4 进行了测试)。所以需要在部署前手动获取最后3个dll:
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
从
C:\Qt\5.4\mingw491_32\bin
我认为您的列表中可能还有一些额外内容...我会仔细检查以下链接中的文档...
这是关于它的权威文档:
http://doc.qt.io/qt-5/windows-deployment.html
http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies
Qt DLL 的大小
令人惊叹的 Qt 库可以做很多事情,但它们有点大。一些旧版本的 Qt 可能会小一些。
对于 Qt 4.8,msvcQtCore4.dll
为 2.5 MB,QtGui4.dll
为 8.4 MB。
Windows 如何解析共享库/动态链接库 (DLL)
以下是 Windows 在运行时跟踪库的方式:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
单个小EXE
如果您静态链接,那么您的 EXE 应该获取它需要的库并构建到一个独立的 exe 中。它仍然可能依赖于 msvc 可再发行组件。有关它的更多信息,请参阅下一节。但它现在将.lib
您引用的 s 编译到您的 EXE 中,并且您的 exe 不再指向其他动态链接库。设置静态链接的 exe 环境确实需要更多时间。
您的 exe 肯定会变得更大,因为它现在包含您之前引用的库的二进制信息。
https://www.google.com/search?q=qt+static+linking
编辑:静态构建 exe,意味着您没有使用 LGPL 版本。
意味着如果您使用 LGPL,您必须让最终用户易于访问您的目标文件。
我认为@peppe 描述得很好(见下面的评论):
从技术上讲,在 LGPL 下使用 Qt 时允许静态链接,即使您的应用程序没有使用 LGPL。唯一棘手的要求是保持第三方能够将您的应用程序重新链接到不同的 Qt 版本。但是您可以通过提供应用程序的巨大目标文件 (.o) 轻松地遵守这一点,只需将其链接到任何 Qt 版本即可。
http://blog.qt.io/blog/2009/11/30/qt-making-the-right-licensing-decision/
查看底部附近的图表。如果你在做商业版,那么你可以静态链接,而不用担心目标文件。
MSVC 可再发行组件
可再发行依赖项与运行时库链接器选项有关。
http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx
/MD, /ML, /MT, /LD
(使用运行时库)
要在开发环境中找到这些选项,请单击“项目”菜单上的“设置”。然后单击 C/C++ 选项卡,然后单击类别框中的代码生成。请参阅使用运行时库下拉框。
下面这两个链接讨论了一些旧版本的 Visual Studio,但推理应该仍然成立。
http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
如何使用 Visual Studio Express 2005 制作完全静态链接的 .exe?
希望有帮助。