Qt 程序在 Windows 下的發佈

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

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

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

1. 編譯模式選擇

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

編譯模式選擇

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

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

編譯生成目錄

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

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

在 cmd 中,運行以下命令:工具

<Qt目錄>\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe   <*.exe>

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

 windeployqt 尋找依賴

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

2.2 手動集成所需的依賴文件

這裏,咱們能夠用 Process Explore 來獲取所依賴的 dll 文件「Dependency Walker軟件也是不錯的選擇」.net

打開 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 發佈
相關文章
相關標籤/搜索