Qt程式打包
最近一直在使用 Qt
寫一個簡單的可用的介面,由於實際需要,待所有的程式功能基本都實現完成之後,就需要對程式進行打包,從而達到在所有的電腦上不需要下載各種依賴庫就可以執行的版本,也就是一個可執行檔案。之前沒有接觸過程式的打包,現在記錄一下成功的案例。
對 Qt
也能夠用程式來說,一般需要三步:
- 生成
release
版本的可執行檔案.exe
; - 找到所有的動態連結庫
dll
; - 將所有的
dll
以及依賴的各種檔案和可執行檔案打包在一起生成最終的一個可執行檔案。
1. 生成 release版本exe
其實這個不難,只要將 VS
下的 Debug
模式改為 Release
模式即可,需要注意的是要將 Release
x64
或者是 x32
的生成一個 release
資料夾,在該資料夾下會看到 release
版本的可執行檔案以及一些依賴庫檔案等等。
2. 使用自帶的 windeployqt 打包
將上一步的 release
資料夾下可執行檔案拷貝出來放在一個單獨的資料夾下(資料夾最好不要使用中文名),比如這裡我放在 d:/exeDemo
這個資料夾中。
然後使用 Qt5
自帶的打包工具 windeployqt
打包:
- 進入
d:/exeDemo
- 開啟
DOS
視窗並進入該目錄中:d:
->cd exeDemo
; - 輸入命令:
windeployqt QtRegister.exe
,這一步的目的是將需要的庫檔案自動的全都拷貝到exe
當前資料夾中,不用自己一個一個的新增進資料夾中。
最後進入該資料夾中可以看到多了很多的東西,這就是 windeployqt
工具自動為我們找到的我們可執行程式執行所需要的所有 Qt
動態連結庫:
但是在使用 windeployqt
後還存在一個問題,如果我們在編寫程式的時候不僅使用了 Qt
的庫,還使用了其他的第三方庫,比如 OpenCV
的話,windeployqt
opencv_world420.dll
等等其他庫檔案,最後這個資料夾下就有很多的檔案:
可以嘗試在該資料夾下開啟可執行檔案,看是不是會提示缺少其他的 dll
,如果有的話就自己慢慢找,然後新增到該資料夾下就可以了。總之就是想法設法的找到執行依賴庫即可,直到可以正確開啟可執行檔案為止。
3. 使用Enigma Virtual Box
通過第二步我們已經生成了可以跨平臺執行的可執行檔案,只要將整個資料夾複製到其他人的電腦上即可執行,但是畢竟這麼一大堆檔案,而且還是一個資料夾,如果程式寫的稍微大一點的話動輒就要拷貝幾個 G
的資料夾 , 顯得有點麻煩,也不符合我們的日常的操作,要是能做成就只有一個可執行檔案就好了。
現在我們就可以使用 Enigma Virtual Box
這個工具了,Enigma
將一大堆的檔案都打包在一起生成一個最終的可執行檔案,並且可以壓縮體積,而且壓縮結果非常樂觀。
使用 Enigma
方法:
首先肯定需要我們下載 Enigma Virtual Box
。直接百度進入 Enigma
官網下載即可(免費):Enigma Virtual Box 官網,下載完成後很簡單的就可以安裝好,這裡就不介紹如何安裝了,下面是安裝後開啟的介面,露個臉:
1.開啟後,選擇我們想要打包的可執行檔案以及最後生成的可執行檔名(可以更改):
2.然後新增其他的檔案,需要注意的是,在 Add
檔案的時候一定要選擇第二項,不要選擇第一項:
3.在彈出的對話方塊中選擇我們新建立的資料夾(直接選擇整個資料夾即可)
4.點選 OK
:
5.然後我們就可以看到該資料夾下所有的需要和可執行檔案打包在一起的所有檔案, 然後點選右下角的 Protect
按鈕就開始打包了:
6.打包中:
7.等程式執行完成後我們就可以在新建的資料夾下看到新生成一個可執行檔案,名字為原來的可執行程式名加上了 protected
(當然,這個名字在第二步是可以改的):
這裡的 QtRegister_protected.exe
就是可以移植的可執行檔案,理論上是放到任何人的電腦上都可以執行,不管有沒有下載 Qt
和 OpenCV
等等庫都可以直接執行。
至此我們從 Qt
程式的生成以及最後的程式打包就已經完成了!
每天進步一點點!
2020.10.17 成都