Qt實用技巧:在CentOS上使用linuxdeployqt打包發佈qt程序

前言

  之前在ubuntu上發佈qt程序相對還好,使用腳本,在麒麟上發佈的時候,使用腳本就不太兼容,同時爲了實現直接點擊應用可以啓動應用的效果,使用linuxdeployqt發佈qt程序。
  本篇文章依然是繼續發佈主題,有centOS的qt項目需要發佈,系統是CentOS8.2,同時也做了CentOS7.5的發佈(CentOS7.5整體差上不差,就是需要先yum卸載自帶的cmake,然後源碼安裝cmake3.4)

 

相關博客

  《Qt實用技巧:ubuntu發佈程序打包流程(解決插件xcb加載失敗) 》:在ubuntu上發佈程序遇到xcb問題,當我們將其部署到另外同樣環境但是未裝qt的環境下,運行起來一部分是xcb文件,有一部分解決後可以正常運行啓用,另一部分直接段錯誤,程序宕掉(提示,段核心錯誤,已轉存什麼的),使用linuxdeployqt能解決此問題,也就是使用腳本打包的升級版本。
  《麒麟系統開發筆記(八):在國產麒麟系統上使用linuxdeployqt發佈qt程序》:這是在麒麟上使用linuxdeployqt打包的全流程。
  《Qt實用技巧:在CentOS上使用linuxdeployqt打包發佈qt程序》:這是在CentOS界面服務器上linuxdeployq打包的流程。

 

linuxdeployqt

  Linux部署工具linuxdeployqt將應用程序作爲輸入,並通過將應用程序使用的資源(如庫、圖形和插件)複製到一個包中使其自包含。結果包可以作爲AppDir或AppImage分發給用戶,也可以放入交叉分發包中。它可以作爲構建過程的一部分,在CMake、qmake和make等系統中部署用C、C++和其他編譯語言編寫的應用程序。當用於基於Qt的應用程序時,它可以綁定運行應用程序所需的Qt的特定最小子集。

源碼下載地址

 

linuxdeployqt編譯(CentOS系統)

步驟一:下載解壓

  在這裏插入圖片描述

步驟二:修改源碼,去掉版本檢查

  找到main.cpp源碼,將這一段(在192行左右)註釋掉:
  在這裏插入圖片描述

cd linuxdeployqt-master
gedit tools/linuxdeployqt/main.cpp

  在這裏插入圖片描述
  在這裏插入圖片描述

步驟三:安裝三方依賴庫CMake

  centOS安裝軟件先切換至root:

su root

  在這裏插入圖片描述
  CMake是自帶了(注意:本篇是centOS8.2,而在centOS7.5上,因爲cmake自帶爲cmake2.8,後續論證了,是需要卸載cmake2.8,源碼裝cmake3.20也編譯錯誤,然後卸載又源碼安裝了cmake3.4,在centOS7.5上後續才順利make編譯linuxdeployqt)
  在這裏插入圖片描述

  使用到了cmake-gui

yum install cmake-gui.x86_64

  在這裏插入圖片描述

  在這裏插入圖片描述

步驟四:從源碼安裝patchelf工具(比其他系統多出來的)

  因爲yum沒有,也沒有找到安裝方法,只能從源碼編譯安裝了。
  在這裏插入圖片描述

wget https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.gz

  解壓:

tar xvf patchelf-0.9.tar.gz

  在這裏插入圖片描述

  進入文件夾,配置configure:

cd patchelf-0.9
./configure

  在這裏插入圖片描述

  編譯make:
  在這裏插入圖片描述

  安裝make install:
  在這裏插入圖片描述
  測試:
  在這裏插入圖片描述

步驟五:使用cmake配置

cmake CMakeList.txt

   在這裏插入圖片描述

  因爲安裝了git與這個工程可能不對,我們直接使用源碼修改大法,直接定位到代碼給刪掉:

gedit CMakeLists.txt

  第7行至63行刪除:
  在這裏插入圖片描述
  在這裏插入圖片描述
  直接刪掉目錄下的緩存文件:CMakeCache.txt,然後繼續:

rm CMakeCache.txt

步驟六:配置Qt的依賴環境

  系統qt5:
  在這裏插入圖片描述
  而我們使用了另外安裝的qt5,所以依賴需要引入我們自己安裝的qt5上。
  使用cmake-gui來指定依賴的qt:

cmake-gui

  選擇對應的路徑,然後使用默認unix makefile方式配置:
  在這裏插入圖片描述
  點擊“Configure”,選擇“Unix Makefiles”方式:
  在這裏插入圖片描述
  這裏默認使用了系統的:
  在這裏插入圖片描述

  雖然系統的和我們安裝的是一樣的還是爲了不出錯需要配置以下:
  在這裏插入圖片描述

  再配置一次:
  在這裏插入圖片描述

步驟七:生成generate

  在這裏插入圖片描述

步驟八:編譯make

  切入build目錄,並且使用make命令即可:

cd build
make

  在這裏插入圖片描述

步驟九:安裝到系統目錄

  沒有make install這個,手動移動到/usr/local/bin

cp linuxdeployqt /usr/local/bin/

  在這裏插入圖片描述

步驟十:測試是否編譯成功

  在這裏插入圖片描述

 

linuxdeployqt打包流程

步驟一:準備打包的應用可執行程序和空目錄

  新建一個工程
   在這裏插入圖片描述

  然後找個空目錄:
  在這裏插入圖片描述

  copy程序:
  在這裏插入圖片描述

步驟二:引入環境變量

  qmake要引入$PATH中(注意:不指定則當前使用的是系統的qmake):
  爲了不影響系統,使用腳本引入,每次打包使用之前使用source env.sh引入即可。

#!/bin/sh
QT_DIR=/home/yang/Qt/5.15.2/gcc_64
export PATH=${QT_DIR}/bin:$PATH
export LIB_PATH=${QT_DIR}/lib:$LIB_PATH
export PLUGIN_PATH=${QT_DIR}/plugins:$PLUGIN_PATH
export QML2_PATH=${QT_DIR}/qml:$QML2_PATH
export LD_LIBRARY_PATH=${QT_DIR}/lib:$LD_LIBRARY_PATH

echo $PATH
echo $LIB_PATH
echo $PLUGIN_PATH
echo $QML2_PATH
echo $LD_LIBRARY_PATH

  在這裏插入圖片描述

步驟三:打包

  繼續打包:

// 打包命令(用這條還是非常可能缺庫,如libxcb.icccm.so.4各種系統庫)
// linuxdeployqt 可執行程序 -verbose2(不要用這條了,之前ubuntu和麒麟都沒出現該問題,但是centOS8.2出現了卻庫的問題)
// 完整打包命令(完全帶進去了)
linuxdeployqt 可執行程序 -appimage

  在這裏插入圖片描述
  發現已經打包成功,直接點擊既可以運行了:
  在這裏插入圖片描述

步驟四:論證

  爲了進一步驗證,我們弄一個全新的CentOS8.2做測試,裸鏡像:
  在這裏插入圖片描述

  之前的app3打包拷貝進去:
  在這裏插入圖片描述

 

入坑

入坑一:coro dump缺少libxcb-icccm.so.4庫

問題

  爲了進一步驗證,我們弄一個全新的CentOS8.2做測試,裸鏡像:
  在這裏插入圖片描述
  之前的app打包拷貝進去:
  在這裏插入圖片描述

  跑不起來:
  在這裏插入圖片描述

   在這裏插入圖片描述

原理

  毫無疑問,應該xcb依賴的一些庫沒有導入進來:

export QT_DEBUG_PLUGINS=1

  在這裏插入圖片描述

解決

  使用linuxdeployqt的時候,使用-appimage

  在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章