麒麟系統(tǒng)開發(fā)筆記(八):在國產(chǎn)麒麟系統(tǒng)上使用linuxdeployqt發(fā)布qt程序
前言
??在ubuntu上發(fā)布qt程序相對還好,使用腳本,但是在麒麟上發(fā)布的時候,因為銀河麒麟等不同版本,使用腳本就不太兼容,同時為了實現(xiàn)直接點擊應用可以啟動應用的效果,使用linuxdeployqt發(fā)布qt程序。
補充
??在ubuntu上發(fā)布程序遇到xcb問題,當我們將其部署到另外同樣環(huán)境但是未裝qt的環(huán)境下,運行起來一部分是xcb文件,有一部分解決后可以正常運行啟用,另一部分直接段錯誤,程序宕掉(提示,段核心錯誤,已轉(zhuǎn)存什么的),使用linuxdeployqt能解決此問題,也就是使用腳本打包的升級版本。
linuxdeployqt
??Linux部署工具linuxdeployqt將應用程序作為輸入,并通過將應用程序使用的資源(如庫、圖形和插件)復制到一個包中使其自包含。結果包可以作為AppDir或AppImage分發(fā)給用戶,也可以放入交叉分發(fā)包中。它可以作為構建過程的一部分,在CMake、qmake和make等系統(tǒng)中部署用C、C++和其他編譯語言編寫的應用程序。當用于基于Qt的應用程序時,它可以綁定運行應用程序所需的Qt的特定最小子集。
源碼下載地址
??gitcode地址:https://gitcode.net/mirrors/probonopd/linuxdeployqt
linuxdeployqt編譯(麒麟系統(tǒng),ubuntu)
步驟一:下載解壓
??

步驟二:修改源碼,去掉版本檢查
??找到main.cpp源碼,將這一段(在192行左右)注釋掉:
gedit tools/linuxdeployqt/main.cpp
??

??(注意:這一步不做會導致打包輸出錯誤信息,具體看“入坑一”)
步驟三:安裝依賴第三方庫
sudo apt-get install cmakesudo apt-get install patchelf
步驟四:使用cmake配置
cmake CMakeList.txt
??

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

??直接刪掉目錄下的緩存文件:CMakeCache.txt,然后繼續(xù):
??

步驟五:配置Qt的依賴環(huán)境
??麒麟系統(tǒng)本身自帶了qt5,而我們使用了另外安裝的qt5,所以依賴需要引入我們自己安裝的qt5上。
??為了方便配置,也不影響系統(tǒng)我們裝上cmake的gui版本:
sudo apt-get install cmake-gui
??

cmake-gui
??選擇對應的路徑,然后使用默認unix makefile方式配置:
??

??錯誤如下:
??

??添加環(huán)境變量路徑:
??

繼續(xù)配置成功:
??

步驟六:生成generate
??

步驟七:編譯make
??切入build目錄,并且使用make命令即可:
make
??

步驟八:安裝到系統(tǒng)目錄
??沒有make install這個,手動移動到/usr/local/bin
sudo mv linuxdeployqt /usr/local/bin/
??

步驟九:測試是否編譯成功
??

linuxdeployqt打包流程
??新建一個工程
??

??然后找個空目錄:
??

??開始打包:
??

??錯誤“QDir::exists: Empty or null file name”,需要調(diào)整打包命令:
??

??錯誤“qmake not fount on the?PATH”,qmake要引入PATH”,qmake要引入PATH中:
export PATH=$PATH:/home/hdgx/Qt5.12.1/5.12.1/gcc_64/bin
??這里要將Qt引入環(huán)境,為了不影響系統(tǒng),使用腳本引入,每次使用之前使用source env.sh引入即可。
#!/bin/shQT_DIR=/home/hdgx/Qt5.12.1/5.12.1/gcc_64export PATH=${QT_DIR}/bin:$PATHexport LIB_PATH=${QT_DIR}/lib:$LIB_PATHexport PLUGIN_PATH=${QT_DIR}/plugins:$PLUGIN_PATHexport QML2_PATH=${QT_DIR}/qml:$QML2_PATHexport LD_LIBRARY_PATH=${QT_DIR}/lib:$LD_LIBRARY_PATHecho $PATHecho $LIB_PATHecho $PLUGIN_PATHecho $QML2_PATHecho $LD_LIBRARY_PATH
???

??

??下次打包遵循此流程即可,繼續(xù)打包:
??

??發(fā)現(xiàn)已經(jīng)打包成功(ERROR:Could not parse verbose level忽略):
??

??

入坑
入坑一:運行報錯“ERROR:The host system is tool new.”
問題
??

原因
??源碼中做了判斷,不是源碼編譯問題,所以要修改源碼。
解決
??找到main.cpp源碼,將這一段(在第190行左右)注釋掉:
??

gedit tools/linuxdeployqt/main.cpp
??

??然后重新make:
??
