程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> QT實現單個EXE文件,qt實現exe

QT實現單個EXE文件,qt實現exe

編輯:C++入門知識

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

 

相關鏈接

Enigma Virtual Box 介紹與下載: http://enigmaprotector.com/en/aboutvb.html



來自為知筆記(Wiz)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved