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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

windeployqt.exe的使用与避坑(windows平台)

發(fā)布時(shí)間:2023/12/10 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windeployqt.exe的使用与避坑(windows平台) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

windeployqt.exe是Qt自帶的工具,用于創(chuàng)建應(yīng)用程序發(fā)布包。
簡單來說,這個(gè)工具可以自動地將某程序依賴的庫、資源拷貝到其所在目錄,防止程序在其他電腦上運(yùn)行報(bào)找不到庫的錯(cuò)誤。
這里貼上官方文檔:https://doc.qt.io/qt-5/windows-deployment.html

原理

windeployqt.exe工作原理很簡單,它會到當(dāng)前的環(huán)境變量PATH配置的搜索路徑中,查找應(yīng)用程序所需要的庫和資源,拷貝到應(yīng)用程序目錄中。

使用

1、先從開始菜單中打開對應(yīng)版本的Qt命令行終端界面,如下圖:

2、命令行中輸入

windeployqt.exe 應(yīng)用程序完整路徑

我們知道,Qt項(xiàng)目路徑不能包含中文,所以為了保險(xiǎn)起見,應(yīng)用程序路徑中不要包含中文。另外,如果應(yīng)用程序路徑中包含空格,需要用雙引號將整個(gè)路徑字符串包裹起來。

回車即可執(zhí)行發(fā)布命令。輸出界面如下圖所示:

進(jìn)入到應(yīng)用程序目錄可以看到,目錄中增加了很多依賴庫和數(shù)據(jù)文件。如下圖所示:

大體上的流程只有這兩步。
整個(gè)發(fā)布過程看似比較簡單,但是其中還是存在一些坑的。

坑點(diǎn)一:未使用Qt的命令行終端執(zhí)行發(fā)布命令,導(dǎo)致庫版本拷貝錯(cuò)誤

下面是直接使用系統(tǒng)cmd命令行發(fā)布軟件的過程:

直接打開cmd命令行,進(jìn)入到windeployqt.exe所在目錄
輸入:windeployqt.exe 應(yīng)用程序完整路徑,回車。

這樣發(fā)布出來的應(yīng)用程序可能會崩潰或者出現(xiàn)以下問題:

面對這個(gè)錯(cuò)誤沒有經(jīng)驗(yàn)的話,很難解決,特別是軟件直接崩潰的話,更無從下手。要解決這個(gè)問題,估計(jì)至少要半天時(shí)間。

0xc000007b是一個(gè)經(jīng)典錯(cuò)誤,它代表著程序啟動時(shí)使用了不正確的版本的庫,導(dǎo)致無法正常運(yùn)行。例如,64位的軟件使用了32位的庫。

所以,發(fā)生上面錯(cuò)誤的原因是,windeployqt.exe從系統(tǒng)的環(huán)境變量路徑PATH中找到了其他版本的依賴庫,而這個(gè)依賴庫并不是我們的應(yīng)用程序真正依賴的那個(gè)版本。當(dāng)你的計(jì)算機(jī)中安裝了很多軟件,某些軟件會添加系統(tǒng)環(huán)境變量,指向自己的bin目錄;抑或是安裝了幾個(gè)版本的Qt開發(fā)環(huán)境時(shí),難免會導(dǎo)致搜索路徑中有同名稱的、不同版本的庫存在,這些情況下,庫版本錯(cuò)亂的問題經(jīng)常發(fā)生。

在Qt命令行中輸入 echo %PATH%,可以查看當(dāng)前Qt使用的環(huán)境變量:

上圖中紅色框內(nèi)是此版本Qt的庫文件目錄,已添加到當(dāng)前PATH環(huán)境變量的最開頭,將會被windeployqt.exe優(yōu)先搜索到。如此一來,Qt相關(guān)的庫便不會產(chǎn)生庫版本錯(cuò)誤的問題。

坑點(diǎn)二:未使用與Qt版本對應(yīng)的windeployqt.exe

發(fā)布軟件時(shí),必須確定項(xiàng)目開發(fā)所使用的Qt版本,并使用此版本Qt安裝目錄下的windeployqt.exe完成發(fā)布過程。每個(gè)Qt版本中的工具只有在此Qt版本下才能確保正常工作,混用會引入未知的風(fēng)險(xiǎn)。

坑點(diǎn)三:發(fā)布時(shí),默認(rèn)文件不會覆蓋

在Qt命令行終端中多次執(zhí)行發(fā)布命令時(shí),已發(fā)布到應(yīng)用程序文件夾中的文件默認(rèn)不會被覆蓋。當(dāng)你第一次發(fā)布出問題時(shí),調(diào)整好環(huán)境后再次發(fā)布并不會覆蓋已存在的文件。這可能和我們期望的不太一樣??梢酝ㄟ^添加強(qiáng)制覆蓋參數(shù)–force強(qiáng)制覆蓋已存在的文件,如下圖所示:

建議始終添加–force參數(shù),防止因文件未覆蓋而出現(xiàn)問題。

細(xì)節(jié)問題

Qt命令行啟動時(shí)有一行提示:

上面打包輸出界面的紅框中,有這樣一行警告:

Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.

意思是說,因?yàn)槲覀儧]有運(yùn)行vcvarsall.bat,所以VS的環(huán)境變量沒有配置好,所以不會拷貝VS相關(guān)的依賴庫。

vcvarsall.bat是VS的自帶的配置環(huán)境變量的批處理文件。以VS2010為例,它位于路徑 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC 下。它屬于VS命令行工具的一部分,這里不多說,直接去看VS官網(wǎng)文檔即可:通過命令行使用 Microsoft C++ 工具集。

那我們就嘗試運(yùn)行vcvarsall.bat來配置一下VS的環(huán)境。整個(gè)過程的完整操作過程界面如下:

可以看到,那一行警告不見了。同時(shí),應(yīng)用程序目錄下多了兩個(gè)庫文件,如下圖:

這樣發(fā)布出來的目錄就帶上了VS的依賴庫,拷貝到?jīng)]有安裝VS的電腦上亦可以運(yùn)行。

命令幫助

除本文提及的基本參數(shù),發(fā)布程序還提供了一些額外參數(shù)選項(xiàng),可以通過查看命令幫助了解。

在Qt命令行終端中輸入

windeployqt.exe -h

可以查看命令幫助,如下圖所示:

限于篇幅,這里不再進(jìn)一步講解,大家可以自己動手嘗試。

結(jié)語

總體來說,雖然發(fā)布步驟比較簡單,但是有坑有細(xì)節(jié),自己嘗試操作幾次就能熟悉了。里面的坑筆者踩過,會浪費(fèi)很多時(shí)間,希望大家能避免踩坑,提高效率。

本文原創(chuàng)首發(fā)于公眾號/頭條號 Qt未來工程師。

總結(jié)

以上是生活随笔為你收集整理的windeployqt.exe的使用与避坑(windows平台)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。