「博客搬家」 原地址: CSDN 原發表時間: 2016-06-04php
本文討論在 Windows 平臺下編譯成功的 Qt 程序,如何在未配置 Qt 開發環境的 Windows 平臺下獨立運行的方法。html
通過驗證發現,在 Ubuntu 平臺下編譯成功的程序可在未安裝 Qt 開發環境下的 Ubuntu16.04 中運行,因此,本文僅討論,在 Windows 平臺下編譯成功的 Qt 程序,在未配置 Qt 開發環境的 Windows 平臺下獨立運行的方法。c++
如若想要發佈程序,在 IDE 中編譯必定要選擇 release
而不是 debug
,編譯成 release 版本相比於 debug 版本,程序體積「可執行文件和 dll 文件」大大減少;windows
編譯爲 release 版本以後,找到生成的目錄,其中只有 exe 擴展名的可執行文件是有用的。app
直接打開可執行文件,會提示找不到 dll 文件,解決方法以下:工具
在 cmd 中,運行以下命令:ui
<Qt目錄>\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe <*.exe>
複製代碼
程序會找到該可執行程序所需的全部依賴文件,並集成進該可執行文件所在的目錄:spa
有時程序會提示找不到所需的 gcc.exe,只須要將隨 Qt 安裝的 mingw 的 bin 目錄添加到系統的環境變量中便可。以後執行可執行文件便可成功運行。.net
這裏,咱們能夠用 Process Explore 來獲取所依賴的 dll 文件「Dependency Walker軟件也是不錯的選擇」插件
打開 procexp.exe,選擇菜單 -> View -> Lower Pane View ->DLLs 勾選此選項,顯示 dll 窗口。
在 Qt Creater 中,調試運行要發佈的程序,在 Process Explore 中,找到該 exe 文件並選中,在下面就看到依賴的 dll 了。
Process Explore尋找依賴
Dependency Walker尋找依賴
系統目錄下的,通常不用關心,按 Path 排序,尋找 Qt 目錄及 mingw 目錄下的 dll 文件,將這些 dll 拷貝至發佈程序目錄下。
以 mingw 版 Qt 爲例「VS版本安裝目錄有些許不一樣」,dll 文件在 Qt 安裝目錄下:
<Qt安裝目錄>\Qt5.5.1\5.5\mingw492_32\bin
複製代碼
找到全部所需的 dll 文件,複製到要發佈程序的目錄下
例如,本程序須要以下依賴:
打包工具,這裏選用 Enigma Virtual Box,運行軟件,選擇發佈程序的可執行文件路徑以及生成文件的路徑,左下角的「添加」按鈕添加全部的 dll 文件,不包含剛纔選擇的 exe 文件。點擊右下角的「文件選項」,選中「啓用文件虛擬化」以及「壓縮文件」,如圖所示:
最後點擊右下角的「執行封包」,生成的 exe 文件的容量小了不少,而且這是一個純粹的「綠色軟件」,直接複製就能在任何存儲介質上運行了。
根據不一樣的程序,須要不一樣的插件庫。例如 QT_DIR/plugins/*/*.dll
,須要將 platforms/*.dll
, accessible/*.dll
的文件結構保留,放在你所編譯的程序所在目錄,例如:
plugins/platforms/qwindows.dll
plugins/accessible/qtaccessiblewidgets.dll
複製代碼