【问题标题】:Is there a way to minimize Qt required Dlls?有没有办法最小化 Qt 所需的 Dll?
【发布时间】:2016-02-13 08:48:47
【问题描述】:

我正在尝试部署一个简单的基于 Qt 的聊天程序,它使用 WebWidget 进行聊天本身、QListWidgets 和一些标签。以及用于网络连接的 QWebSocket。但我确实需要添加 120 MB 的文件来部署它。

这是我在 pro 文件中的 QT 和 CONFIG 变量:

CONFIG += qt release
QT     += gui websockets webkitwidgets widgets

这是我必须添加的文件列表:

│   D3Dcompiler_47.dll
│   icudt54.dll
│   icuin54.dll
│   icuuc54.dll
│   libEGL.dll
│   libgcc_s_dw2-1.dll
│   libGLESV2.dll
│   libstdc++-6.dll
│   libwinpthread-1.dll
│   opengl32sw.dll
│   Qt5Core.dll
│   Qt5Gui.dll
│   Qt5Multimedia.dll
│   Qt5MultimediaWidgets.dll
│   Qt5Network.dll
│   Qt5OpenGL.dll
│   Qt5Positioning.dll
│   Qt5PrintSupport.dll
│   Qt5Qml.dll
│   Qt5Quick.dll
│   Qt5Sensors.dll
│   Qt5Sql.dll
│   Qt5Svg.dll
│   Qt5WebChannel.dll
│   Qt5WebKit.dll
│   Qt5WebKitWidgets.dll
│   Qt5WebSockets.dll
│   Qt5Widgets.dll
│
├───audio
│       qtaudio_windows.dll
│
├───bearer
│       qgenericbearer.dll
│       qnativewifibearer.dll
│
├───iconengines
│       qsvgicon.dll
│
├───imageformats
│       qdds.dll
│       qgif.dll
│       qicns.dll
│       qico.dll
│       qjp2.dll
│       qjpeg.dll
│       qmng.dll
│       qsvg.dll
│       qtga.dll
│       qtiff.dll
│       qwbmp.dll
│       qwebp.dll
│
├───mediaservice
│       dsengine.dll
│       qtmedia_audioengine.dll
│
├───platforms
│       qwindows.dll
│
├───playlistformats
│       qtmultimedia_m3u.dll
│
├───position
│       qtposition_positionpoll.dll
│
├───printsupport
│       windowsprintersupport.dll
│
├───sensorgestures
│       qtsensorgestures_plugin.dll
│       qtsensorgestures_shakeplugin.dll
│
├───sensors
│       qtsensors_generic.dll
│
├───sqldrivers
│       qsqlite.dll
│       qsqlmysql.dll
│       qsqlodbc.dll
│       qsqlpsql.dll
│
└───translations
        qt_ca.qm
        qt_cs.qm
        qt_de.qm
        qt_en.qm
        qt_fi.qm
        qt_fr.qm
        qt_he.qm
        qt_hu.qm
        qt_it.qm
        qt_ja.qm
        qt_ko.qm
        qt_lv.qm
        qt_ru.qm
        qt_sk.qm
        qt_uk.qm

QtPositioning、Sql dll、Qml 和 QtQuick?上次我部署 Qt 程序是使用 Qt4;我记得我的依赖项少了..有什么问题吗?

【问题讨论】:

  • 您是如何生成此列表的?你说得对,它不应该那么多(通常不会)
  • 我怀疑默认情况下 webkit 可能会引入很多额外的东西(多媒体、定位等)。我不明白为什么 Qt Quick 会被拉进来。
  • @Felix 我用 windeployqt.exe 复制了所需的文件。

标签: qt deployment


【解决方案1】:

您可能希望自己构建 Qt 并尽可能减少它。它仍然会是一团糟,但会更小。删除不需要的可选模块,尽可能使用系统库而不是与 Qt 捆绑的那些,不要使用 ICU - 仅此一项就会减少近 30MB 的依赖项。

最好的选择是使用静态构建和静态链接,但是有很多限制,您要么需要商业许可,要么需要打开您的代码,而且,QML 项目的部署已经并且已经被破坏了年。可悲的是,似乎让所有免费使用 Qt 的人的生活尽可能悲惨已成为当务之急,以迫使开发人员花在昂贵的商业许可证上,这是解决这种情况的唯一方法,或者至少有望在 Qt 5.7 发布时实现。

顺便说一句,如果这些 DLL 被部署工具引入 - 我建议不要信任它。我昨天真的试过了,结果证明它完全坏了——未能提取一半所需的 DLL,其中一半实际上并不需要,而且就 qml 文件而言,它做得更糟。

如果不是通过部署工具,那些额外的 dll 可能是间接依赖项——例如,Web 套接字定义了一个 QML API,因此它们可能会将 QML 作为依赖项引入,它本身会引入一系列其他模块和库。您应该调查是否可以在没有 QML 方面的情况下构建这些模块。

【讨论】:

  • 我尝试静态编译 Qt,但它占用了将近 5 GB(但这不是一个真正的问题),但它退出并出现错误,我无法解决/追溯。所以我的快速解决方案是也发送 dll。是的,确实,这些文件是由部署工具复制的。我会尝试删除一些 dll 并检查会发生什么。谢谢。
  • 好的,我查过了。我可以省略除“平台”之外的所有文件夹。但需要 Qt5Qml.dll、Qt5Quick、Qt5Positioning.dll 等 dll。 :/ 太糟糕了。我想我应该尝试静态构建。谢谢!
  • 获取 msys2,然后 pacman -Ss qt5 static 然后 pacman -S actual_package_name - 这将为您提供静态 Qt 构建 + 所有依赖项,只要确保您没有运行任何防病毒软件,因为二进制修补程序可能会出错在你身上。在 Creator 中设置你通过 msys 获得的编译器、调试器和 qt 版本,制作一个工具包,你就可以开始了。
  • 我试试看。谢谢!
  • 静态qt版好像没有webkit。 qmake 失败并出现错误 Project ERROR: Unknown module(s) in QT: webkitwidgets。我想,那我得自己编译了。
猜你喜欢
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2021-02-21
  • 2010-09-09
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多