有時候發布用Qt寫的軟件是件令人煩惱的事情,明明發布的只是一個簡單功能的小軟件,非得再附上一堆超大的動態鏈接庫,實在讓人覺得汗顏 。
在可執行文件單文件化方面,有多種方法。常用的是編譯並使用靜態 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
執行批處理後可以看到文件夾加入了不少動態鏈接庫:
注意,可能會缺少三個動態鏈接庫 libgcc_s_dw2-1.dll、libstdc++-6.dll、libwinpthread-1.dll,需要手工把他們復制過來。如果不需要國際化,可以把translations文件夾刪除,以減小一部分空間的占用。還有幾個動態庫在程序加載的時候沒有調用過,似乎也可以刪除。
Enigma Virtual Box 是一款免費軟件,可以將軟件的關聯文件和注冊表信息合並到單個文件,通過在RAM中的虛擬化來使用(不需要向磁盤釋放打包了的文件)。它的工作原理是在主可執行程序文件中嵌入一個先於主程序執行的加載器,加載器截獲程序對磁盤的讀寫操作,如果目標文件已被虛擬化(打包),那麼就在內存中模擬這個文件並返回請求的結果。它還支持壓縮功能,可以大大地減小單 exe 文件的大小。
在 Files 選項卡的 Virtual Box Files 上右鍵並點擊 Add Folder Recursive ,選擇軟件所在文件夾。
文件夾內的所有文件都被加入列表,再從中刪除主 exe 文件和其他未被用到的文件。
點擊 Files Options ,勾選 Enable Files Virtualization 與 Compress Files。
最後點擊 Process ,執行打包和壓縮作業就完成了單 exe 文件的制作,是不是很簡單呢?經壓縮後,生成的 exe 文件只有8M多了。
這下子可以愉快地發布給小伙伴們使用了
Enigma Virtual Box 介紹與下載: http://enigmaprotector.com/en/aboutvb.html