【问题标题】:make qt distribution neat. remove part of dll?使 qt 分布整齐。删除部分dll?
【发布时间】:2013-06-30 10:27:22
【问题描述】:

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

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

我该怎么做?谢谢

【问题讨论】:

  • 你能说得更具体点吗?

标签: windows qt dll


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

【讨论】:

    【解决方案2】:

    最简单的方法是使用 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。

    【讨论】:

      猜你喜欢
      • 2015-04-18
      • 1970-01-01
      • 2021-10-23
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多