「博客搬家」 原地址: CSDN 原發表時間: 2016-06-04
本文討論在 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>
程序會找到該可執行程序所需的所有依賴文件,并集成進該可執行文件所在的目錄:
有時程序會提示找不到所需的 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尋找依賴
Dependency Walker尋找依賴
系統目錄下的,一般不用關心,按 Path 排序,尋找 Qt 目錄及 mingw 目錄下的 dll 文件,將這些 dll 拷貝至發布程序目錄下。
以 mingw 版 Qt 為例「VS版本安裝目錄有些許不同」,dll 文件在 Qt 安裝目錄下:
<Qt安裝目錄>\Qt5.5.1\5.5\mingw492_32\bin
找到所有所需的 dll 文件,復制到要發布程序的目錄下
例如,本程序需要如下依賴:
3. 打包為單個可執行文件
打包工具,這里選用 Enigma Virtual Box,運行軟件,選擇發布程序的可執行文件路徑以及生成文件的路徑,左下角的“添加”按鈕添加所有的 dll 文件,不包含剛才選擇的 exe 文件。點擊右下角的「文件選項」,選中「啟用文件虛擬化」以及「壓縮文件」,如圖所示:
最后點擊右下角的“執行封包”,生成的 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.dll
plugins/accessible/qtaccessiblewidgets.dll
4.4 EGL 依賴庫,為 OpenGL, OpenGLes 提供接口
- libEGL.dll
- libGLESv2.dll
4.5 mingw 依賴庫「msvc 編譯則無需這些庫」
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
4.6 VC 運行庫「mingw 編譯則無需這些庫」
- msvcr110.dll「對應VS2012」
- msvcp110.dll