QT打包基于平臺的不同有兩種方式:
- 1.基于第三方工具:linuxdeployqt (官網下載的可執行程式僅支持x86_64架構,其他架構需自行下載原始碼編譯方可運行)
- 2.基于shell腳本方式拷貝相應依賴檔案 (推薦非x86_64的一些國產系統使用)
1.基于第三方工具:linuxdeployqt (官網下載的可執行程式僅支持x86_64架構,其他架構需自行下載原始碼編譯方可運行)
1).github上有編譯好的可執行程式:https://github.com/probonopd/linuxdeployqt/releases

2).將下載后的檔案賦予權限,并放入/usr/local/bin目錄中
chmod 777 linuxdeployqt-6-x86_64.AppImage
mv linuxdeployqt-6-x86_64.AppImage /usr/local/bin
執行 linuxdelpoyqt --version 看是否有版本資訊列印,以此判斷命令是否正常
root@test-KaiTianM610B-D120:~# linuxdeployqt-6-x86_64.AppImage --version
linuxdeployqt 5 (commit 37631e5), build 631 built on 2019-01-25 22:47:58 UTC
3).配置QT環境變數
vi /etc/profile #打開檔案
在尾部添加內容如下:(/opt/Qt5.12.2是我的QT安裝路徑,請自行替換),然后保存并退出vi
export PATH=$PATH:/opt/Qt5.12.2/5.12.2/gcc_64/lib/:/opt/Qt5.12.2/5.12.2/gcc_64/lib:/opt/Qt5.12.2/5.12.2/gcc_64/include:/opt/Qt5.12.2/5.12.2/gcc_64/bin
source /etc/profile #重新加載配置,使環境變數生效
4). 新建一個檔案夾如test,將編譯的可執行檔案拷貝進去,比如執行檔案叫checkServer 執行ldd checkServer 確定動態庫是否都能找到,如遇到xxxxx not found 則需要配置對應的so路徑到LD_LIBRARY_PATH環境變數中;
- 比如我專案中有一個lib目錄專門存放第三方so庫,ldd命令執行后 這些庫找不到,則需要把該lib目錄添加到LD_LIBRARY_PATH環境變數中: (/home/test/checkServer是我的專案目錄)
vi /etc/profile
export LD_LIBRARY_PATH=/home/test/checkServer/lib:$LD_LIBRARY_PATH
source /etc/profile #重新加載環境變數
ldconfig #將新的元件為系統所共享
5).一切準備就緒,輸入打包命令并等待打包完成即可,
linuxdeployqt-6-x86_64.AppImage checkServer -appimage
2.基于shell腳本方式拷貝相應依賴檔案 (推薦非x86_64的一些國產系統使用)
1).首先執行第一種方法的第4步 (如新建目錄名為 test,下面所有test都表示我們的打包目錄)
2).在test中新建腳本copy.sh
#!/bin/bash
LibDir=$PWD"/lib" #獲取lib目錄路徑
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir) #創建lib目錄
for Variable in ${lib_array[@]} #回圈所有依賴的動態庫路徑
do
cp "$Variable" $LibDir #拷貝到lib目錄中
done
3).給腳本賦予權限
chmod 777 copy.sh
4).執行腳本,引數是可執行檔案名
./copy.sh checkServer
5).將生成的lib目錄中的所有檔案移動到上層,與可執行檔案同級,然后將lib目錄洗掉
6).進入QT安裝目錄的/opt/Qt5.12.2/5.12.2/gcc_64/plugins/platforms 將copy.sh放到該目錄下并執行./copylib.sh libqxcb.so 
7). 將生成的platforms整個目錄移動到test下,將lib中的所有檔案放到test目錄下(即test/platforms/lib* 移動到test),然后將test/platforms/的lib目錄及copy.sh腳本檔案洗掉
8).在test目錄下撰寫.sh運行腳本,腳本名必須與可執行程式一致,比如這里叫checkServer.sh(因為如果目前將程式發送到其他電腦上,執行程式則因系統無法獲取so庫路徑,將無法運行)
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"
9).賦予運行腳本權限
Chmod 777 checkServer.sh
10).現在可以將test目錄拷貝到其他主機上,通過./checkServer.sh來運行 (腳本作用是在運行可執行檔案前,先將test目錄中的依賴庫路徑加入到環境變數中,使系統知道這些庫的存在)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/1346.html
標籤:其他
上一篇:維護Nginx網頁時如何跳轉維護頁面?新舊域名如何跳轉?-------總結了下nginx rewrite 網頁跳轉!
