使qt分布整洁。删除部分DLL?

时间:2013-06-30 10:27:23

标签: windows qt dll

我在Windows上制作了一个qt程序。 我想和我的朋友分享。 但我的朋友使用纯Windows 7。

如果我只能包含所需的dll,那就太好了。 如果我可以删除未使用的部分dll,那将会更好。 (减少dll的大小)

我该怎么做?感谢

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用Qt的静态版本构建,并启用链接时间优化。你需要MSVC(不知道它是否适用于MinGW的GCC),并配置Qt与

configure -static -release -ltcg

当然,还要注意使用(L)GPL版本的Qt时静态链接的含义。


通常,您可以通过功能开关修剪部分Qt。 Unix配置脚本通过传递-no-feature-featurename直接支持它,其中featurenamesrc/corelib/global/qfeatures.txt文件中列出的功能之一。

可能有一种方法可以使用Windows配置可执行文件(最终,将相应的QT_NO_FEATURE宏添加到生成的src/corelib/global/qconfig.h文件中......)。

请注意,功能开关不受官方支持(“尽力而为”支持),因此禁用某些Qt可能会破坏您的构建。 YMMV。

答案 1 :(得分:1)

尝试以任何方式减小实际DLL的大小意味着删除代码,这是一个非常糟糕的主意。如果您执行以下操作,仍然可以更改Qt源:

  • 拥有商业执照
  • 分享所做的所有更改

...话虽如此,这不是你的具体情况。

尝试减少所需DLL的数量是一个完全不同的故事 - 您的应用程序通常只需要它所需的模块的DLL。但是有些模块依赖于其他模块,所以你最终可能会获得自己不使用但在内部使用的东西的DLL。例如,您可能最终依赖于基于QWidget项目的Direct3D DLL,这是因为许多库存Qt构建都是为了使用ANGLE构建的,这是一个基于DirectX的OpenGL仿真层(ES)2。您可以使用桌面OpenGL的Qt构建来删除一些DLL,但与Qt DLL相比它们相当小。从Qt中省略webkit是删除几MB DLL依赖的好方法。

peppe-static链接已经提到了最后一个选项,它要求你自己创建一个Qt的静态构建。并且存在一些限制 - 如果要分发封闭的源/商业应用程序,则必须拥有该特定平台的商业Qt许可证。对于开源的东西和测试目的,我想这没关系。静态构建非常好,因为它们提供了更好的性能,最终只有一个大约8-9 MB的文件用于基本的GUI应用程序(QtCore / QtGUI和QtWidgets)。上次我检查时,QtQuick / QML应用程序无法使用静态构建。