Qt 程序在 Windows 下的發佈

「博客搬家」 原地址: CSDN 原發表時間: 2016-06-04php

本文討論在 Windows 平臺下編譯成功的 Qt 程序,如何在未配置 Qt 開發環境的 Windows 平臺下獨立運行的方法。html

通過驗證發現,在 Ubuntu 平臺下編譯成功的程序可在未安裝 Qt 開發環境下的 Ubuntu16.04 中運行,因此,本文僅討論,在 Windows 平臺下編譯成功的 Qt 程序,在未配置 Qt 開發環境的 Windows 平臺下獨立運行的方法。c++

1. 編譯模式選擇

如若想要發佈程序,在 IDE 中編譯必定要選擇 release 而不是 debug,編譯成 release 版本相比於 debug 版本,程序體積「可執行文件和 dll 文件」大大減少;windows

編譯模式選擇

2. 集成所需 dll 文件及其餘依賴庫

編譯爲 release 版本以後,找到生成的目錄,其中只有 exe 擴展名的可執行文件是有用的。app

編譯生成目錄

直接打開可執行文件,會提示找不到 dll 文件,解決方法以下:工具

2.1 使用 Qt 自帶的 windeployqt.exe 尋找依賴文件

在 cmd 中,運行以下命令:ui

<Qt目錄>\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe   <*.exe>
複製代碼

程序會找到該可執行程序所需的全部依賴文件,並集成進該可執行文件所在的目錄:spa

windeployqt 尋找依賴

有時程序會提示找不到所需的 gcc.exe,只須要將隨 Qt 安裝的 mingw 的 bin 目錄添加到系統的環境變量中便可。以後執行可執行文件便可成功運行。.net

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.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

5. 參考資料

  1. Qt 5.5 程序打包發佈以及依賴
  2. Qt 在 Windows 上發佈之所需運行庫「一」
  3. 將 Qt 動態連接生成的 exe 及依賴 dll 打包方法
  4. Qt 5 編譯 & 打包依賴 dll 發佈
相關文章
相關標籤/搜索