Qt技巧:Win7下打包發布Qt程序(解釋的比較清楚,把exe和dll偽裝合並成一個文件)


轉自:http://www.stardrad.com/blog/qt-5%E7%A8%8B%E5%BA%8F%E5%9C%A8windows%E4%B8%8A%E7%9A%84%E5%8F%91%E5%B8%83/

http://blog.163.com/qimo601@126/blog/static/1582209320132291718389/

 

最近做了個qt的程序,但是發布程序比較困難,因為qt5有着比較多的dll,如下兩篇詳述了qt dll依賴庫,以及如何查詢自己工程所用的dll及打包發布的方法。

 

 

QT 5的依賴鏈接庫變得更多了,摸索許久,又查閱了一些資料,總結出以下QT 5程序所依賴的庫。

一、依賴庫一覽

1.QT模塊庫

1
2
3
4
Qt5Core.dll      #QT核心庫
Qt5Gui.dll       #QT Gui庫
Qt5Widgets.dll   #QT Widgets庫,QT 5中GUI程序基本都需要此dll
#還有其他程序用到的Qt5XXX.dll

2.ICU(International Component for Unicode,Unicode工具)依賴庫

1
2
3
icudt49.dll     
icuin49.dll    
icuuc49.dll   

3.QT插件庫,Qt新增,有點坑爹,路徑必須正確

1
2
3
4
5
6
# 根據不同的程序,需要不同的插件庫
#例如 QT_DIR/plugins/*/*.dll
# 需要將 platforms/*.dll,accessible/*.dll的文件結構保留
# 放在你所編譯的程序所在目錄
plugins/platforms/qwindows.dll
plugins/accessible/qtaccessiblewidgets.dll

4.EGL依賴庫,為OpenGL,OpenGL es提供接口

1
2
libEGL.dll
libGLESv2.dll

5.mingw依賴庫(msvc編譯則無需這些庫)

1
2
3
libgcc_s_sjlj-1.dll
libstdc++-6.dll
libwinpthread-1.dll

6.VC運行庫(mingw編譯則無需這些庫)

1
2
msvcr110.dll(對應VS2012)
msvcp110.dll

二、文件結構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--platforms
       --qwindows.dll
       --*.dll
--accessible
       --qtaccessiblewidgets.dll
       --*.dll
--(other plugin folder)
       --*.dll
--yourApp.exe
--Qt5Core.dll
--Qt5Gui.dll     
--Qt5Widgets.dll
--icudt49.dll     
--icuin49.dll    
--icuuc49.dll
--libEGL.dll
--libGLESv2.dll
--libgcc_s_sjlj-1.dll(mingw)
--libstdc++-6.dll(mingw)
--libwinpthread-1.dll(mingw)
--msvcr110.dll(msvc)
--msvcp110.dll(msvc)

三、總結

說實話,QT 5雖然有了ICU,Open GL的支持,還有c++11的支持,但是由於依賴的DLL實在是太多,着實有點不太方便。一個mingw編譯的qt gui程序,光是依賴dll就有30-50M的依賴庫,確實很不爽啊。不過7z壓縮后有10M左右,還可以接受

 

 

Qt靜態編譯鏈接生成的exe文件,不需依賴七大姑八大姨的一堆dll,可以獨立運行,發布很方便。但絕大多數用的都是Qt開源版本,如果用靜態鏈接,會有些限制。那有沒有辦法即能享受靜態編譯的方便,又不受開源許可的限制呢?方法之一,就是用動態編譯,然后把exe和需要的dll整合成一個文件,問題就解決了。
具體步驟:
一,先動態編譯鏈接,生成exe文件
二,找到依賴的dll文件
       這里,我們可以用Process Explore來獲取所依賴的dll文件
      下載:
       http://pan.baidu.com/share/link?shareid=419262&uk=2701984065
       打開procexp.exe,通過菜單View==》Lower Pane View==》DLLs  勾選,顯示dll窗口

        這里,我們以test.exe為例,
        在Qt環境下,將exe運行起來,在ProcessExplor中,找到就可以找到test.exe,選中,在下面就看到依賴的dll了。

       系統目錄下的,一般不用關心,按Path排序,看Qt目錄及mingw目錄下的,將這些dll拷貝出來,單獨放到一個目錄下。
三,打包
       打包工具,這里選用Enigma Virtual Box,
       下載:
        http://pan.baidu.com/share/link?shareid=419263&uk=2701984065
       安裝,運行

       Enter Input File Name中,選擇exe
       Enter Output File Name,輸出文件名稱
       點Add按鈕,將前面准備好的dll文件,添加進來
       點Files Options,勾選Enable Files Virtualization和Compress files,OK
       最后,點Process,大告成。

http://blog.csdn.net/jan5_reyn/article/details/39042175


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM