前言
此方法適用于對自己建立的QT項目進行打包,Ubuntu環(huán)境為18.04臭挽,使用QT Creator4.12.3 Based on Qt5.14.2。項目打包之后可以復(fù)制到其他電腦上運行咬腕,切具有快捷啟動方式欢峰。
一.下載并安裝linuxdeployqt
1.下載
方式一:若系統(tǒng)在ubuntu18.04以下,可以直接去 github下載編譯好的linuxdeployqt-x86_64.AppImage 應(yīng)用程序文件
方式二:若系統(tǒng)ubuntu18.04涨共,則github上還未提供已經(jīng)編譯好的AppImage,需要下載[linuxdeployqt源碼](https://github.com/probonopd/linuxdeployqt自己在系統(tǒng)上進行編譯后方可使用纽帖。
2.安裝
方式一:利用下載編譯好的linuxdeployqt-x86_64.AppImage 應(yīng)用程序文件。下載好之后举反,將其改名為linuxdeployqt抛计,并chmod +x,然后復(fù)制到 /usr/local/bin/照筑。然后命令行輸入 linuxdelpoyqt –version吹截,查看是否安裝成功,若輸出版本信息表示安裝成功凝危。
$ chmod +x linuxdeployqt-x86_64.AppImage
$ mv linuxdeployqt-x86_64.AppImage linuxdeployqt
$ mv linuxdeployqt /usr/local/bin
$ linuxdelpoyqt --version
#輸出的版本信息
linuxdeployqt 5 (commit 37631e5), build 631 built on 2019-01-25 22:47:58 UTC
方式二:編譯源碼波俄。
首先默認已經(jīng)安裝好了g++、git等工具蛾默,如果沒有的話得先安裝懦铺。還需要安裝 patchelf 工具,命令如下:
sudo apt install patchelf
gitclone源碼(建議一定要使用命令行支鸡,直接download的會編譯失敗)
git clone https://github.com/probonopd/linuxdeployqt.git
#進入linuxdeployqt文件夾冬念,命令如下:
cd linuxdeployqt
#修改 tools/linuxdeployqt/main.cpp 源代碼,注釋掉源碼中版本判斷的語句牧挣。
gedit tools/linuxdeployqt/main.cpp
之后右鍵linuxdeployqt文件夾急前,使用QT Creator打開,配置工程后在release模式下進行編譯瀑构,可以得到linuxdeployqt的二進制文件裆针,路徑為(tools/linuxdeployqt/linuxdeployqt)。
#進入二進制文件所在路徑
cd ./tools/linuxdeployqt
#賦予可執(zhí)行權(quán)限
sudo chmod a+x linuxdeployqt
#為了方便之后使用寺晌,可以將該可執(zhí)行文件復(fù)制到 /usr/local/bin 目錄下:
sudo cp linuxdeployqt /usr/local/bin/
二.安裝appimagetool
linuxdeployqt命令要用到選項 -appImage世吨,因此需要安裝一下 appimagetool,下載和安裝命令如下:
sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool
sudo chmod a+x /usr/local/bin/appimagetool
三.配置 qt 的環(huán)境變量
終端輸入vim ~/.bashrc命令呻征,修改 .bashrc 文件耘婚,在文件末尾追加以下內(nèi)容,其中/opt/Qt/5.15.0是我的Qt安裝路徑陆赋,大家要用自己的路徑代替:
#add QT ENV
export PATH=/opt/Qt/5.15.0/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/opt/Qt/5.15.0/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/opt/Qt/5.15.0/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/opt/Qt/5.15.0/gcc_64/qml:$QML2_IMPORT_PATH
最后要source一下使 ~/.bashrc 這個shell文件立即生效沐祷,而不必注銷并重新登錄嚷闭。
$ source ~/.bashrc
四.運行l(wèi)inuxdeployqt命令,進行打包
1.運行Qt生成release版本的可執(zhí)行文件戈轿,勾選了“shadow build”,所以示例用的是"build-自己的工程名稱-Desktop_Qt_5_15_0_GCC_64bit-Release"文件夾下的自己的工程名稱可執(zhí)行文件阵子;
2.創(chuàng)建一個文件夾思杯,名稱最好是用可執(zhí)行文件的名稱,然后將自己的工程名稱可執(zhí)行文件復(fù)制到此文件夾下挠进;
3.使用 linuxdeployqt 進行打包色乾,一定要加上-appimage選項,命令如下:
$ linuxdeployqt 自己的工程名稱 -appimage
到這里會出現(xiàn)幾個問題:
問題一:lib*.so.1 => not found领突,類似此類的輸出暖璧,說明該動態(tài)鏈接庫找不到,可以進行如下操作君旦。
#先查看二進制文件所依賴的動態(tài)庫文件有哪些
$ldd #二進制文件的名稱
#找到所依賴的庫文件的路徑澎办,并添加到/etc/ld.so.conf
#例如.so庫文件的路徑在/usr/lib/x86_64-linux-gnu,就在/etc/ld.so.conf文件中加上/usr/lib/x86_64-linux-gnu金砍,缺少哪個庫就添加哪個庫的路徑
$sudo vim /etc/ld.so.conf
#保存配置文件后局蚀,使用下面的命令使其生效
$sudo /sbin/ldconfig
問題二:在問題一的基礎(chǔ)上,還會提示缺少依賴庫恕稠,但通過ldd查詢卻沒有該依賴庫琅绅,此時可以去考慮百度搜索該庫的名稱,看是否缺少該庫對應(yīng)的軟件包鹅巍。例如我提示的是libpq.so.5 notfound千扶,通過搜索發(fā)現(xiàn)該依賴庫屬于postgresql,通過如下命令進行安裝
$sudo apt install postgresql
#通過該命令取查找?guī)煳募穆窂?$sudo find / -name libpq.so.5
最后像問題一中一樣添加路徑并使其生效骆捧。
問題三:在問題一中使配置生效的一步中澎羞,可能會提示類似“*libcudnn.so.5 不是符號連接”的問題,那么可以如下方式解決敛苇。重新建立鏈接并刪除原鏈接煤痕。
首先找到usr/local/cuda-8.0/lib64/目錄(libcudnn所在目錄),搜索 libcudnn 然后發(fā)現(xiàn)兩個文件libcudnn.so.5 和libcudnn.so.5.0.5 理論上只有一個libcudnn.so.5.0.5
#終端執(zhí)行
$ln -sf /usr/local/cuda-8.0/lib64/libcudnn.so.5.0.5 /usr/local/cuda-8.0/lib64/libcudnn.so.5
#再進行
$sudo ldconfig
這時候會發(fā)現(xiàn)usr/local/cuda-8.0/lib64/目錄下只有l(wèi)ibcudnn.so.5.0.5 文件了接谨,libcudnn.so.5消失了摆碉。這個問題就可以解決了。
五.打包后的處理
1.如果在執(zhí)行完$ linuxdeployqt 自己的工程名稱 -appimage命令以后脓豪,出現(xiàn)如下內(nèi)容(還有提示圖標或者其他庫的問題的可以忽略巷帝,只要看到下面的輸出,就說明成功了):
Categories entry not found in desktop file
.desktop file is missing a Categories= key
此時會生成AppRun文件扫夜,./AppRun或者./自己工程的二進制文件都可以運行楞泼,如果項目運行用到了本地文件驰徊,也要放到二進制文件所在的目錄里面才能保證項目的正常運行。
六.使其像應(yīng)用程序一樣可以啟動
1.首先剛剛linuxdeployqt執(zhí)行完之后堕阔,會生成default.desktop文件棍厂,使用vim對其進行編輯,內(nèi)容如下
[Desktop Entry]
Version=app的版本
Name=app的名字
Comment= 說明信息
Exec=app的執(zhí)行路徑超陆,絕對路徑
Icon=icon 路徑牺弹,絕對路徑
Terminal=false #是否在終端啟動
Type=Application
Categories=Utility;Application;
之后賦予權(quán)限
chmod a+x default.desktop
這時就可以直接雙擊運行了(提示信任時,直接點擊信任即可时呀,這時會發(fā)現(xiàn)圖標和名稱也變了)张漂。
注:這里自定義生成.desktop文件可以復(fù)制到/usr/share/applications中,這樣應(yīng)用程序中就可以有改程序谨娜;.desktop文件無論復(fù)制到什么路徑下都可以執(zhí)行航攒,且項目運行的當前路徑為主目錄(比如,工程中有數(shù)據(jù)庫操作趴梢,那么生成的數(shù)據(jù)庫文件就會在主目錄漠畜,同理,工程依賴的資源文件坞靶,也要放在主目錄)盆驹。
上述內(nèi)容參考:
1.在Linux下使用linuxdeployqt發(fā)布Qt程序
2.ubuntu18.04通過linuxdeployqt打包Qt5.0項目
3.ldd * -> not found
4.解決*.so不是符號連接
5.加載共享庫時出錯
還可以嘗試不使用linuxdeployqt
Qt實用技巧:ubuntu發(fā)布程序打包流程(解決插件xcb加載失敗)