標籤:windows http qt 安裝 nal virt process ima 解決方案 proc
本文討論在 Windows 平台下編譯成功的 Qt 程式,如何在未配置 Qt 開發環境的 Windows 平台下獨立啟動並執行方法。
經過驗證發現,在 Ubuntu 平台下編譯成功的程式可在未安裝 Qt 開發環境下的 Ubuntu16.04 中運行,所以,本文僅討論,在 Windows 平台下編譯成功的 Qt 程式,在未配置 Qt 開發環境的 Windows 平台下獨立啟動並執行方法。
1. 編譯模式選擇
如若想要發布程式,在 IDE 中編譯一定要選擇 release
而不是 debug
,編譯成 release 版本相比於 debug 版本,程式體積「可執行檔和 dll 檔案」大大減小;
編譯模式選擇2. 整合所需 dll 檔案及其他依賴庫
編譯為 release 版本之後,找到產生的目錄,其中只有 exe 副檔名的可執行檔是有用的。
編譯組建目錄
直接開啟可執行檔,會提示找不到 dll 檔案,解決方案如下:
2.1 使用 Qt 內建的 windeployqt.exe 尋找依賴檔案
在 cmd 中,運行如下命令:
<Qt目錄>\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe <*.exe>
程式會找到該可執行程式所需的所有依賴檔案,並整合進該可執行檔所在的目錄:
windeployqt 尋找依賴
有時程式會提示找不到所需的 gcc.exe,只需要將隨 Qt 安裝的 mingw 的 bin 目錄添加到系統的環境變數中即可。之後執行可執行檔即可成功運行。
2.2 手動整合所需的依賴檔案
這裡,我們可以用 Process Explore 來擷取所依賴的 dll 檔案「Dependency Walker軟體也是不錯的選擇」
開啟 procexp.exe,選擇菜單 -> View -> Lower Pane View ->DLLs 勾選此選項,顯示 dll 視窗。
在 Qt Creater 中,調試運行要發布的程式,在 Process Explore 中,找到該 exe 檔案並選中,在下面就看到依賴的 dll 了。
Process Explore尋找依賴
Process Explore尋找依賴
Dependency Walker尋找依賴
Dependency Walker尋找依賴
系統目錄下的,一般不用關心,按 Path 排序,尋找 Qt 目錄及 mingw 目錄下的 dll 檔案,將這些 dll 拷貝至發布程式目錄下。
以 mingw 版 Qt 為例「VS版本安裝目錄有些許不同」,dll 檔案在 Qt 安裝目錄下:
<Qt安裝目錄>\Qt5.5.1\5.5\mingw492_32\bin
找到所有所需的 dll 檔案,複製到要發布程式的目錄下
Qt運行目錄
例如,本程式需要如下依賴:
該程式所需依賴3. 打包為單個可執行檔
打包工具,這裡選用 Enigma Virtual Box,運行軟體,選擇發布程式的可執行檔路徑以及組建檔案的路徑,左下角的“添加”按鈕添加所有的 dll 檔案,不包含剛才選擇的 exe 檔案。點擊右下角的「檔案選項」,選中「啟用檔案虛擬化」以及「壓縮檔」,:
Enigma Virtual Box的使用
最後點擊右下角的“執行封包”,產生的 exe 檔案的容量小了很多,並且這是一個純粹的「綠色軟體」,直接複製就能在任何儲存介質上運行了。
4. Qt5 主要依賴連結庫說明4.1 Qt 模組庫
- Qt5Core.dll #QT核心庫
- Qt5Gui.dll #QT Gui庫
- Qt5Widgets.dll #QT Widgets庫,QT 5中GUI程式基本都需要此dll
- 還有其他程式用到的Qt5XXX.dll
4.2 ICU 依賴庫「International Component for Unicode,Unicode工具」
- icudt51.dll
- icuin51.dll
- icuuc51.dll
4.3 Qt 外掛程式庫「新增庫,路徑必須正確」
根據不同的程式,需要不同的外掛程式庫。例如 QT_DIR/plugins/*/*.dll
,需要將 platforms/*.dll
, accessible/*.dll
的檔案結構保留,放在你所編譯的程式所在目錄,例如:
plugins/platforms/qwindows.dllplugins/accessible/qtaccessiblewidgets.dll
4.4 EGL 依賴庫,為 OpenGL, OpenGLes 提供介面
4.5 mingw 依賴庫「msvc 編譯則無需這些庫」
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
4.6 VC 運行庫「mingw 編譯則無需這些庫」
- msvcr110.dll「對應VS2012」
- msvcp110.dll
5. 參考資料
- Qt 5.5 程式打包發布以及依賴
- Qt 在 Windows 上發布之所需運行庫「一」
- 將 Qt 動態連結產生的 exe 及依賴 dll 打包方法
- Qt 5 編譯 & 打包依賴 dll 發布
雪中亮
連結:http://www.jianshu.com/p/1462977095d7
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
Qt 程式在 Windows 下的發布