寫于2023.10.20
最近遇到了一個(gè)問(wèn)題,需要把在windows下面寫好的qt程序打包成linux可以運(yùn)行的文件進(jìn)行發(fā)布,而且最終目標(biāo)和windows一樣,要在一個(gè)近乎于純凈環(huán)境的機(jī)器上進(jìn)行運(yùn)行,故而有了這個(gè)博客,記錄了我們小組攻克的一系列問(wèn)題
由于是已經(jīng)攻克過(guò)后才有的這一篇博客,所以可能有些細(xì)節(jié)我已經(jīng)想不起來(lái)了,但大體過(guò)程已經(jīng)寫在了下面
首先說(shuō)一下我們的環(huán)境,用的是ubuntu 22.04.3LTS,下面附上官網(wǎng)的連接
https://cn.ubuntu.com/download/desktop
之后給ubuntu配置源,這里我配置的是科大的源
首先打開(kāi)中國(guó)科學(xué)技術(shù)大學(xué)鏡像網(wǎng)站
USTC Open Source Software Mirror
點(diǎn)擊網(wǎng)頁(yè)右
側(cè)“配置軟件源”按鍵。如下圖所示,在彈出的界面中,發(fā)行版鏡像選擇“Ubuntu
源使用幫助”。
進(jìn)入 Ubuntu 源使用幫助后,如下圖所示,在手動(dòng)更改配置文件部分復(fù)制選
框中的源配置信息。
注意不同的 Ubuntu 版本需要對(duì)應(yīng)不同的源,Ubuntu 版本有對(duì)應(yīng)代號(hào),替換
源中代號(hào)即可跟換版本。
復(fù)制號(hào)源配置信息后,使用 CTRL+ALT+T 快捷鍵打開(kāi) Terminal,輸入如下圖所
示命令, 備份源配置文件,并使用 gedit 軟件打開(kāi)該文件,然后將復(fù)制的信息覆
蓋源信息并保存
使用科大源配置信息覆蓋/etc/apt/sources.list 文件信息后,保存文件內(nèi)容,然
后再終端中輸入 sudo apt-get update 命令并執(zhí)行,系統(tǒng)會(huì)自動(dòng)更新索引信息,使
配置生效。運(yùn)行 sudo apt-get upgrade 命令,可以對(duì)系統(tǒng)安裝軟件進(jìn)行更新
上面的圖片都是我使用的教程截下來(lái)的,因?yàn)槲乙呀?jīng)解決這個(gè)問(wèn)題了,請(qǐng)?jiān)彂卸璧奈也辉儆靡粋€(gè)新機(jī)給大家演示(其實(shí)這個(gè)帖子我也鴿了好幾天)
之后安裝vim,gcc
在終端輸入并運(yùn)行 sudo apt-get install vim 指令,系統(tǒng)即可自動(dòng)安裝 vim 編輯
器。vim 軟件安裝過(guò)程如下圖所示:
同 vim 編輯器安裝類似,早終端輸入并運(yùn)行 sudo apt-get install gcc,系統(tǒng)即
可自動(dòng)完成 gcc 編譯器的安裝。
至此完成部分準(zhǔn)備工作,之后我們開(kāi)始安裝qt
Qt6的話,請(qǐng)到下面這個(gè)網(wǎng)址下載在線安裝器
Index of /qt/official_releases/online_installers/ | 清華大學(xué)開(kāi)源軟件鏡像站 | Tsinghua Open Source Mirror
安裝完了之后進(jìn)入這個(gè)下載出來(lái)的文件的文件夾,右鍵,在終端打開(kāi),然后輸入代碼,首先賦予可執(zhí)行權(quán)限,也可以直接右鍵然后在屬性里勾選
sudo 777 chmod qt-xxxxxx.run
./ qt-xxxxxx.run
這個(gè)chmod后面是你下載下來(lái)的文件名,不需要我多說(shuō)吧,不能理解我也沒(méi)辦法
然后運(yùn)行,之后創(chuàng)建文件,我這里下的是qt6.4.2,
Additional libraries里面的組件盡量勾選,但webengine一定不能少,如果你沒(méi)選也可以在qt的目錄下面找到這個(gè)文件雙擊,補(bǔ)全一下
之后打開(kāi)你的程序,記得一定要用qmake,打開(kāi).pro,然后在里面添加這么一行
QMAKE_LFAGS += -no-pie
添加進(jìn)你的.pro文件里面
之后進(jìn)行release的構(gòu)建,這里需要注意的是如果你的windows程序源碼用到了Qactive里面的東西,例如axcontainer,那么會(huì)報(bào)錯(cuò),這個(gè)模塊是只有windows才會(huì)有的,所以只能夠把相關(guān)代碼屏蔽或者刪除,這一點(diǎn)我無(wú)能為力
之后配置qt環(huán)境,在命令行輸入這一句
之后打開(kāi)了文件,可以看到是這樣的
Qt的配置是這幾行
Qt的配置大家根據(jù)自身的路徑來(lái)修改就好,我的用戶名是pacific,大家要改成自己的用戶名才行
之后也加上這一行,后面有用
之后在控制臺(tái)輸入
source ~/.bashrc
讓環(huán)境立即生效
到這里我們就把qt的問(wèn)題解決了,之后我們開(kāi)始正式進(jìn)入打包環(huán)節(jié),打包呢,需要很多很多東西的加持,其中遇到的坑我也會(huì)給大家一一說(shuō)明,首先大家知道windows下面有一個(gè)命令叫做windeployqt,但很遺憾,linux下面沒(méi)有這個(gè)命令,但所幸github上面有工具,所以我們來(lái)下載一下
下面附上github網(wǎng)址
https://github.com/probonopd/linuxdeployqt/releases
打開(kāi)過(guò)后大家可以看到是這樣的
這里我們要看自己的ubuntu版本,如果你用的是18.04還是16.04以下的話,可以直接下載工具,就是這個(gè)
而如果你和我一樣是比較新的ubuntu,我們需要下載源碼,大家看到這里不要急,覺(jué)得麻煩,很多博客天天說(shuō)的很簡(jiǎn)單,但其中很多問(wèn)題他們都沒(méi)有提到過(guò),例如這個(gè)打包過(guò)程中會(huì)報(bào)錯(cuò)什么的,我是一步一步走下來(lái)的,所以自然知道該怎么做,而不是沒(méi)頭沒(méi)尾的抄襲,網(wǎng)上的博客說(shuō)自己是20.04的ubuntu,居然沒(méi)報(bào)錯(cuò),這顯然是不可能的
至于為什么要下載源碼是因?yàn)樽詭У墓ぞ咴诟甙姹緐buntu會(huì)報(bào)錯(cuò)顯示the host system is too new,我想從網(wǎng)上找個(gè)截圖但沒(méi)找到,我自己的已經(jīng)解決問(wèn)題了,但我確實(shí)親身經(jīng)歷過(guò),以下是找到的報(bào)錯(cuò)
ERROR: The host system is too new.
Please run on a system with a glibc version no newer than what comes with the oldest.
still-supported mainstream distribution, which currently is glibc 2.20.
This is so that the resulting bundle will work on most still-supported Linux distributions.
For more information, please see
https://github.com/probonopd/linuxdeployqt/issues/340
回歸正題,我們下載源碼
之后解壓到ubuntu桌面并且打開(kāi).pro
如果你不是這樣的,而是只有一個(gè).pro文件沒(méi)有下面的src tests還有tools,那么很遺憾,你可能需要換一個(gè)版本或者自行解決了,我之前用的是6.5.2,就是會(huì)打不開(kāi)
之后進(jìn)到這個(gè)文件里面
看到這串藍(lán)色代碼了嗎?注釋掉
然后調(diào)整成release,右鍵linuxdeployqt那個(gè)文件夾然后右鍵點(diǎn)擊構(gòu)建
構(gòu)建完成就會(huì)像上面這樣,然后到生成的文件夾里面的bin文件夾下面可以看到這
右鍵在終端運(yùn)行,然后輸入
chmod 777 linuxdeployqt
sudo mv linuxdeployqt? /usr/local/bin
然后可以在控制臺(tái)輸入
linuxdeployqt -appimage
正常情況下就可以輸出這個(gè)了
如果不是的話,檢查一下之前export的qt路徑,
如果正常之后大家可以測(cè)試一下,把你要打包的那個(gè)可執(zhí)行文件放到文件夾下面然后再終端打開(kāi)并且輸入linuxdeployqt xxxx ,這里的xxxx是你的文件名,那么大概率會(huì)出現(xiàn)下圖的錯(cuò)誤,這個(gè)錯(cuò)誤是我截圖的,我本身遇到過(guò)這個(gè)錯(cuò)但是解決了
這個(gè)是缺少patchelf導(dǎo)致的,大家可以點(diǎn)擊下面的連接,
Channels for NixOS project(s)
然后按照域名索引進(jìn)行選擇patchelf下載就可以
下載后解壓進(jìn)入文件夾執(zhí)行如下命令
./configure
make
sudo make install
之后還需要下載最后一個(gè)包
Appimagetool
下載地址
https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
下載完成后執(zhí)行如下命令:
sudo mv appimagetool-x86_64.AppImage appimagetool
chmod 777 appimagetool
sudo./appimagetool /usr/local/bin
之后進(jìn)入/usr/local/bin ,你會(huì)看到以上的三個(gè)文件,linuxdeployqt,patchelf,appimagetool
之后把編譯生成的包放到文件夾下面,然后輸入
Linuxdeployqt xxx -appimage即可開(kāi)始打包
期間也會(huì)有其他錯(cuò)誤,例如沒(méi)有fuse運(yùn)行不了之類的,這種錯(cuò)誤直接
Sudo apt-get install fuse
這樣獲取fuse能解決百分之九十九的問(wèn)題
其他的可以自行查閱,問(wèn)題不是很大的,
但打包任然會(huì)報(bào)一個(gè)錯(cuò)誤
別慌,一切盡在掌握,打開(kāi)打包生成的這個(gè)文件
修改成這樣
然后再次執(zhí)行,就可以打包成功并且得到這個(gè)文件
這個(gè)就是我們最后的打包啦,到別人的電腦上的話別人要首先賦予他可執(zhí)行權(quán)限然后在命令行,注意是命令行,輸入./xxxx xxxx是打包出來(lái)的.appimage的全稱,包括后綴,雖然linux不看后綴,就可以在其他電腦上運(yùn)行了,當(dāng)然實(shí)測(cè)也需要新電腦安裝fuse
之間還有一些問(wèn)題就是高版本的ubuntu打包出來(lái)的程序在低版本上面運(yùn)行會(huì)報(bào)錯(cuò),顯示glibc版本缺失,這個(gè)問(wèn)題我還沒(méi)有解決,只能夠說(shuō)盡量在同版本甚至更高版本上面運(yùn)行打包的程序吧,或者降低打包的電腦的版本也不失為一種解決方案,但仍然有待測(cè)試文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-761735.html
最后,看在我是個(gè)本科生的份上,各位哥哥姐姐能不能給我點(diǎn)一個(gè)贊呢?真的是本科生??!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-761735.html
到了這里,關(guān)于linux平臺(tái)下qt程序的編譯以及使用linuxdeployqt打包可執(zhí)行程序和在高版本22.04ubuntu下使用linuxdeployqt打包文件的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!