2016-02-13 54 views
2

我想部署一個簡單的基於Qt的聊天程序,它使用WebWidget作爲聊天本身,QListWidgets和一些標籤。以及用於網絡連接的QWebSocket。但我確實需要添加120 MB文件才能部署它。有沒有一種方法可以最大限度地減少Qt所需的Dll?

這是我的QT和配置變量在親文件:

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?上次我用Qt4部署了一個Qt程序;我記得我有更少的依賴關係..有什麼問題嗎?

+0

您是如何生成此列表的?你的實力,它不應該是那麼多(通常不是) – Felix

+0

可能的重複[我必須包括所有這些Qt DLL與我的應用程序?](http://stackoverflow.com/questions/17736229/do -i-have-to-include-all-these-qt-dlls-with-my-application) – demonplus

+0

我懷疑webkit在默認情況下可能會牽扯到很多額外的東西(多媒體,定位......)。我不明白爲什麼Qt Quick會被拉進來。 – peppe

回答

3

你可能想要自己做Qt構建並儘可能地減少它。它仍然是一團糟,但更小。刪除不需要的可選模塊,儘可能使用系統庫而不是使用Qt捆綁的系統庫,不要使用ICU - 單獨會削減近30MB的依賴關係。

最好的選擇是靜態地使用靜態構建和鏈接,但是在播放時有很多限制,您需要商業許可或打開您的代碼,而且QML項目的部署已經被破壞多年。令人遺憾的是,似乎讓所有使用Qt的人的生命儘可能地變得可憐,這已經成爲一個優先事項,以迫使開發人員花費昂貴的商業許可證,這是唯一的補救措施,或者至少它會在Qt 5.7發佈之前。

順便說一句,如果這些DLL被部署工具拉進來 - 我建議不要相信它。我昨天從字面上理解了它,事實證明它已經被完全破壞 - 沒有吸引到一半所需的DLL,其中一半的DLL並不是真正需要的,並且在qml文件方面,情況更糟。

如果不是部署工具,那些額外的dll可能是間接依賴關係 - 例如web套接字定義了一個QML API,因此它們可能會將QML作爲依賴關係提取出來,該依賴關係本身會牽扯其他模塊和庫的級聯。您應該調查是否可以在沒有QML端的情況下構建這些模塊。

+0

我試着靜態編譯Qt,但花了將近5GB(但這不是一個真正的問題),但它退出了一個錯誤,我無法解決/追溯。所以我的快速解決方案也是運送dll。 確實,這些文件是由部署工具複製的。我會嘗試刪除一些dll並檢查發生了什麼。謝謝。 – Ctwx

+0

好的,我查了一下。我可以省略除「平臺」之外的所有文件夾。但是像Qt5Qml.dll,Qt5Quick,Qt5Positioning.dll等DLL是必需的。 :/ 太糟糕了。我想我應該嘗試靜態構建。謝謝! – Ctwx

+1

獲取msys2,然後是'pacman -Ss qt5 static'然後'pacman -S actual_package_name' - 這將爲您帶來一個靜態Qt build +所有依賴項,只要確保您沒有運行任何防病毒程序,因爲二進制修補程序可能會出錯在你身上。在Creator中設置你通過msys獲得的編譯器,調試器和qt版本,製作一個工具包,你很好。 – dtech

相關問題