QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)
QT學習筆記(三):Qt軟件打包發布(QT5.8 _msvc2013_64+Win10_64)
- 1.編譯方式介紹:
- 2.動態編譯方式打包發布QT程序:
- 方法一:手動復制
- 方法二:使用工具
- 問題&解決:
環境:QT5.8 _msvc2013_64+Win10_64 (MSVC 編譯器)
1.編譯方式介紹:
Qt開發的程序發布的時候經常采用兩種方式:1)靜態編譯,可生成單一的可執行文件;2)動態編譯,需同時附上需要的dll文件。
靜態編譯
靜態編譯,是指把相關的庫也一并引入exe文件,這樣程序的尺寸就會很大,不過程序發布就會變得簡單很多。
優點: 發布簡單,單一文件,在移植時如果空間足夠,采用靜態編譯比較可靠
缺點: 庫文件很大,更新程序版本不方便。每次升級,都要重新分發所有的內容。對QT而言,需要重新編譯靜態庫(非常耗時),且插件的使用比較麻煩;
動態編譯(Qt默認)
動態編譯,是指相關的庫,以dll動態鏈接庫的形式引用。動態編譯的exe程序比較小,因為相關的庫都沒有包含進來。所以程序發布的時候要把相關的庫也一并發布出去。
一般使用動態編譯動態鏈接Qt庫,尤其代碼規模比較大,需要多人協作開發時,不同模塊按dll劃分比較方便,采用靜態鏈接是不現實的。
優點: 更新方便,發布多個產品時,可以統一使用一個庫。
缺點: 文件多、雜。
Debug版本
Debug 通常稱為調試版本,它包含調試信息,并且不作任何優化,便于程序員調試程序。
Release 版本
Release 稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的。一般來說,release版的可執行程序體積要比debug版小很多,而且由于剝離了許多調試信息及符號等,運行效率相對也高一些,因此一般采用release編譯。
2.動態編譯方式打包發布QT程序:
方法一:手動復制
采用Qt動態編譯,release版本的程序。需要將相應的dll跟Qt可執行程序exe文件放在一個目錄下:
所需的dll文件包括:
1)Qt模塊庫
Qt5Cored.dll
Qt5Guid.dll
Qt5Widgetsd.dll
2)ICU依賴庫
icudt51.dll
icuin51.dll
icuuc51.dll
3)EGL依賴庫
libEGLd.dll
libGLESv2d.dll
4)插件庫(Qt安裝目錄下即可找到D:\Software\Qt\Qt5.1.0\5.1.0\msvc2010\plugins\platforms)
圖片支持庫:imageformats
音頻、視頻支持庫:mediaservice
平臺支持庫:platforms
等等…
注意:查找對應的插件文件夾,粘貼到安裝目錄(一定要保持目錄結構,例如“platforms/***.dll”),詳細結構見打包發布準備的文件組織結構。
5)VS運行時庫msvcrt,如:
msvcp120.dll
msvcr120.dll
( 注意:發布程序的時候注意版本(Debug/Release)
如果是Debug版本的則是.前面帶d的(Qt5Cored.dll、Qt5Guid.dll、Qt5Widgetsd.dll)
如果是Release版本的則是.前面不帶d的(Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll))
6)程序中引用的第三方庫,如QWT,openCV,第三方庫的dll文件如qwt.dll、opencv_world300.dll。
**PS:
①.將exe文件在另一臺電腦上運行時,若缺少運行所必需的dll文件,會報錯——缺少dll文件。
②.C Runtime庫:
問題比較多的是VC的運行時庫 msvcrt。使用VC編譯的C或C++程序,都需要相關的C runtime庫才能運行。本文采用的是VS2013編譯器,對應的就是MSVCR120。進入Microsoft.VC120.CRT 目錄:
就能找到C runtime庫(msvcp120.dll,msvcr120.dll,vccorlib120.dll)。
從vc2005開始微軟加入了manifest機制控制運行時庫的加載,如果用戶機器上未安裝過msvcrt的distribution pack,程序就不能運行。簡單的處理方法是把C runtime庫一并包含進去,即將Microsoft.VC120.CRT 目錄下的文件(msvcp120.dll,msvcr120.dll,vccorlib120.dll)放到exe相同的目錄即可。應用程序如果找不到系統安裝的msvcrt,就會加載自帶的庫文件。
③.Qt庫
編譯Qt后,將Qt生成路徑(…\build-untitled-Desktop_Qt_5_4_1_MSVC2013_OpenGL_64bit-Release\release)中的exe程序放到新建的package中,Qt程序中使用到的(在.pro文件中添加的)QtCore,QtGUI,xml,sql,multimedia等相關的動態庫和調用它的exe一起放在同一個目錄中。
④.Qt的圖片解碼庫比如:jpeg、gif解碼等是以插件形式存在的,要包含imageformats文件夾中的dll文件,還有windows平臺相關的platforms,windows中的語音相關的audio等文件夾中包含的dll文件。
對于采用動態編譯的Qt可執行程序,如果不確定該程序使用了哪些必要的dll,可以使用工具查看該Qt可執行程序使用了哪些dll,見下:
方法二:使用工具
1、 通過工具,查找程序運行依賴的dll文件
最簡單的方式是用Qt自帶的生成必備dll文件的 windepolyqt.exe工具 (D:\Qt\Qt5.8.0\5.8\msvc2013_64\bin 目錄下):windepolyqt xxx.exe
Qt for Windows - Deployment 官方文檔:
https://doc.qt.io/qt-5/windows-deployment.html#application-dependencies
使用方法:將Qt的bin目錄加入PATH環境,就可以直接在命令行使用windeployqt調用。將生成的xxx.exe可執行文件復制到一個空的文件夾里,進入這個文件夾 ,運行windeployqt xxx.exe,則該執行文件需要的大部分依賴文件都自動拷貝到這個文件夾里了。
2、第三方的SDK庫添加
如果還使用了其他的第三方的SDK,如QWT,OpenCV等,就需要手動將所需dll拷貝過來,如果不知道還需要哪些dll文件,可以用**Dependency Walker (depends.exe)**和 微軟的進程查看器 Process Explorer(procexp.exe) 來查看程序運行時還缺少哪些dll。
3、 QT程序打包發布,用戶打包程序,變成(桌面)安裝包,可使用工具,如 NSIS,開源工具Inno Setup進行打包。
參考博客:
NSIS 官網下載
https://nsis.sourceforge.io/Download
Qt之NSIS打包 :(NIS Edit+NSIS 方式)
https://blog.csdn.net/xuhui_liu/article/details/71721556
Inno setup 打包教程:
https://jingyan.baidu.com/article/295430f1232df70c7e0050fe.html
https://blog.csdn.net/ruifangcui7758/article/details/6662646
https://blog.csdn.net/hebbely/article/details/78168071
Qt 軟件發布與打包:
https://blog.51cto.com/2678482/1616826
其他打包方式:
https://blog.csdn.net/qq_34719188/article/details/79947764
這樣之后,就得到了一個在其它沒有安裝Qt和VS的電腦上也可以運行的Qt程序安裝包了。
問題&解決:
完成上述第1步是及:從命令行模式進入該文件夾執行語句 windeployqt xxxx.exe 時提示錯誤,無法找到“Visual Studio安裝目錄,未設置VCINSTALLDIR ”,如圖:
C:\Users\Leon\Desktop\新建文件夾> windeployqt HelloWorld.exe C:\Users\Leon\Desktop\Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.解決方法:
直接用 “VS2013 開發人員命令提示” 命令行去,執行剛才的 windeployqt HelloWorld.exe,會將 “vcredist_x64.exe”(vc x64 運行最少環境)程序放入當前目錄。
1)先cd 進執行程序(HelloWorld.exe)所在目錄,再次運行 windeployqt HelloWorld.exe:
D:\Microsoft Visual Studio 12.0>C: C:\>cd C:\Users\Leon\Desktop\新建文件夾 windeployqt HelloWorld.exe結果:
2)可能還是會漏掉一些包,要多在其他電腦上進行測試,運行時會提示缺少某個dll,想辦法找到該dll,這個dll你自己的電腦上一般都會有,全局搜下,復制粘貼到exe所在目錄下
總結
以上是生活随笔為你收集整理的QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV学习笔记(八):形态学mor
- 下一篇: QT学习笔记(十三):绘制图像