日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)

發布時間:2024/7/23 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 目錄:

  ${VS Install Dir}\VC\redist\x64\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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。