1

I made a qt program on windows. And I want to share with my friend. but my friend use pure windows 7.

it would be nice if I can include only dll needed. and it would be much nicer if I can remove part of dll which are unused. (to reduce size of dll)

how can I do this? thanks

4

2 回答 2

1

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

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

...话虽如此,在您的特定情况下,这不是要走的路。

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

peppe 已经提到了最后一个选项 - 静态链接,它要求您对 Qt 本身进行静态构建。并且有一些限制 - 如果您想分发封闭源代码/商业应用程序,您必须拥有该特定平台的商业 Qt 许可证。对于开源的东西和测试目的,我想这没问题。静态构建非常好,因为它们提供了更好的性能,并且您最终会得到一个大约 8-9 MB 的基本 GUI 应用程序(QtCore/QtGUI 和 QtWidgets)的文件。上次我检查时,QtQuick/QML 应用程序不适用于静态构建。

于 2013-06-30T11:23:30.530 回答
1

最简单的方法是使用 Qt 的静态发布版本,并启用链接时间优化。为此,您需要 MSVC(不知道它是否适用于 MinGW 的 GCC),并使用

configure -static -release -ltcg

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


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

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

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

于 2013-06-30T10:52:39.523 回答