1. 程式人生 > 實用技巧 >Qt程式打包

Qt程式打包

最近一直在使用 Qt 寫一個簡單的可用的介面,由於實際需要,待所有的程式功能基本都實現完成之後,就需要對程式進行打包,從而達到在所有的電腦上不需要下載各種依賴庫就可以執行的版本,也就是一個可執行檔案。之前沒有接觸過程式的打包,現在記錄一下成功的案例。

Qt 也能夠用程式來說,一般需要三步:

  1. 生成 release 版本的可執行檔案 .exe
  2. 找到所有的動態連結庫 dll
  3. 將所有的 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 就是可以移植的可執行檔案,理論上是放到任何人的電腦上都可以執行,不管有沒有下載 QtOpenCV 等等庫都可以直接執行。

至此我們從 Qt 程式的生成以及最後的程式打包就已經完成了!


每天進步一點點!


2020.10.17 成都