我正在尝试部署一个简单的基于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 dlls, Qml 和 QtQuick?我上次部署Qt程序是使用Qt4;我记得我的依赖性较少..有什么问题吗?
你可能想做你自己的Qt构建,并尽可能减少它。它仍然会是一团糟,但规模较小。删除你不需要的可选模块,尽可能使用系统库而不是与Qt捆绑在一起的库,不要使用ICU - 仅此一项就可以减少近30MB的依赖关系。
最好的选择是使用静态构建和静态链接,但是有很多限制在起作用,您要么需要商业许可证,要么需要打开代码,而且QML项目的部署已经并且已经中断多年。可悲的是,让所有免费使用Qt的人的生活变得尽可能悲惨似乎已经成为一个相当重要的优先事项,以迫使开发人员在昂贵的商业许可证上花费,这是这种情况的唯一补救措施,或者至少在Qt 5.7发布时
有望如此。顺便说一句,如果这些 DLL 被部署工具拉入 - 我建议不要信任它。我昨天从字面上尝试过,结果完全坏了 - 未能拉入所需的一半 DLL,它拉入的一半实际上并不需要,就 qml 文件而言,它做得更糟。
如果不是通过部署工具,这些额外的dll可能是间接依赖项 - 例如,Web套接字定义了一个QML API,因此它们可能会将QML作为依赖项拉入,而依赖项本身会拉取其他模块和库的级联。您应该调查是否可以在没有 QML 端的情况下构建这些模块。