Qt 程式在 Windows 下的發布

來源:互聯網
上載者:User

標籤: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 提供介面
  • 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 發布


雪中亮
連結:http://www.jianshu.com/p/1462977095d7
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

Qt 程式在 Windows 下的發布

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.