1. 程式人生 > >QT實現單個EXE檔案

QT實現單個EXE檔案

有時候釋出用Qt寫的軟體是件令人煩惱的事情,明明發布的只是一個簡單功能的小軟體,非得再附上一堆超大的動態連結庫,實在讓人覺得汗顏 :arrow: 。

在可執行檔案單檔案化方面,有多種方法。常用的是編譯並使用靜態 Qt 庫、使用 exe 打包工具等。exe 打包工具有很多,本文介紹使用 Enigma Virtual Box 來打包和壓縮檔案。


從收集動態連結庫開始

通常是通過查詢軟體對動態連結庫的依賴來收集的,有多種流行的工具軟體可供使用:Process Explorer(微軟自家的東東)、Dependency Walker 都是不錯的軟體。但本文介紹的是Qt自帶的小工具:windeployqt.exe

windeployqt 是一個用於 Windows 系統上的控制檯程式,方便起見,可以寫一個批處理檔案(*.bat)放在 exe 所在的資料夾:

 

 
1 2 3 4 5   @ echo  off C : \ Qt \ Qt5 . 5.0 \ 5.5 \ mingw492_32 \ bin \
windeployqt . exe  target . exe(換成你的 exe檔名) pause  

 

2015-12-06_033221

執行批處理後可以看到資料夾加入了不少動態連結庫:

2015-12-06_033423

注意,可能會缺少三個動態連結庫 libgcc_s_dw2-1.dll、libstdc++-6.dll、libwinpthread-1.dll,需要手工把他們複製過來。如果不需要國際化,可以把translations資料夾刪除,以減小一部分空間的佔用。還有幾個動態庫在程式載入的時候沒有呼叫過,似乎也可以刪除。


Enigma Virtual Box 簡介

Enigma Virtual Box 是一款免費軟體,可以將軟體的關聯檔案和登錄檔資訊合併到單個檔案,通過在RAM中的虛擬化來使用(不需要向磁碟釋放打包了的檔案)。它的工作原理是在主可執行程式檔案中嵌入一個先於主程式執行的載入器,載入器截獲程式對磁碟的讀寫操作,如果目標檔案已被虛擬化(打包),那麼就在記憶體中模擬這個檔案並返回請求的結果。它還支援壓縮功能,可以大大地減小單 exe 檔案的大小。


生成單可執行檔案

2015-12-06_034225

在 Files 選項卡的 Virtual Box Files 上右鍵並點選 Add Folder Recursive ,選擇軟體所在資料夾。

2015-12-06_034301

資料夾內的所有檔案都被加入列表,再從中刪除主 exe 檔案和其他未被用到的檔案。

2015-12-06_034357

點選 Files Options ,勾選 Enable Files Virtualization 與 Compress Files。

2015-12-06_035143

最後點選 Process ,執行打包和壓縮作業就完成了單 exe 檔案的製作,是不是很簡單呢?經壓縮後,生成的 exe 檔案只有8M多了。

2015-12-06_035900

這下子可以愉快地釋出給小夥伴們使用了 :mrgreen: 

2015-12-07_001042