四.編寫執行指令碼
qt應用程式在windows下打包相對比較簡單;linux下使用qt進行開發的程式,如果想要在其他搭載linux系統的主機上執行則需要將要發布的qt程式依賴的一些動態鏈結庫一起打包,主要方法:linux系統下可以手寫乙個指令碼檔案,充分利用ldd命令進行打包。
作業系統環境: ubuntu18.04 64位
qt版本: 5.12.4
在qt中使用release的方式編譯出可執行檔案;
新建乙個資料夾,將可執行檔案拷貝進去備用。
使用命令進入可執行檔案的目錄下,然後在這個空目錄下新建乙個檔案(pack.sh),檔案內容如下:
#!/bin/sh
exe=
des=
"***xx"#步驟一中新建目錄的完整路徑
deplist
=$(ldd $exe |
awk '
}')cp
$deplist
$des
chmod
777 pack.sh
./pack.sh
可執行檔案依賴的鏈結庫將會拷貝到所在的目錄
為了發布過程不出現各種bug,找不到庫、找不到平台等等一系列問題,現在使用乙個笨辦法。
將qt使用的編譯器目錄下的所有庫拷貝到上述所建資料夾下。
查詢本機qt安裝路徑,我的安裝路徑為: /opt/qt5.14.2/5.14.2/gcc_64/
將qt使用的編譯器目錄下的plugins資料夾拷貝到上述資料夾目錄下(主要依賴platform資料夾所包含的庫檔案,可以實驗只用platform庫檔案程式是否可以正常執行)。這樣得到的檔案可能會比較多,然後在保證程式正常執行的情況下,可以嘗試刪除無用的庫檔案。
直接使用linux的ldd命令也可以查詢可執行檔案的依賴庫,ldd命令和指令碼功能一樣,寫成指令碼是為了方便,查詢之後就拷貝過來。使用ldd命令查詢到依賴庫需要自己乙個個去當前系統中查詢,命令示例:
可能會遇到提示無法載入xcb外掛程式等類似問題,一般這種問題就是缺少了動態庫的依賴環境
libqt5xcbqpa.so.5
libqt5dbus.so.5
這是兩個鏈結,需要使用命令來檢視qt不同版本對應的這兩個檔案的實體檔案(直接拷貝鏈結檔案無效),進入qt安裝環境中下的lib庫,一般是/qt5.xx.x/xx.x/gcc_xx/lib這路徑,進入後找到並複製到打包資料夾中。
即將原來的鏈結檔案刪除,並把檔案複製進來並修改為原來的鏈結檔名。
#!/bin/sh=`
basename $0 |
sed s,\.sh$,,`
dirname=`
dirname $0`
tmp="$"if[
"$"!=
"/"]
;then
dirname
=$pwd/$dirname
fild_library_path
=$dirname
echo
$ld_library_path
export
path
=$ld_library_path
:$path
echo
$path
"$@"
chmod
QT 打包發布應用程式
目錄 一 用windepolyqt.exe發布exe應用程式 二 打包成單檔案exe 三 打包安裝程式 已剪輯自 qt creator release 的.exe 應用程式的執行需要依賴一些動態鏈結庫,如果在一台沒有安裝 qt的計算機上執行就需要打包動態庫拷貝過去才能執行。qt自帶有 windepl...
Ubuntu快速打包發布Qt應用程式
前段時間需要在linux下開發qt的串列埠程式,有一塊板子已經 安裝好qt作為除錯機,需要打包給沒裝開發環境的板子做測試 打包步驟如下 1 使用qt編譯完之後在debug release資料夾下得到可執行檔案如demo 2 新建乙個資料夾如demopack,把demo拷貝這個地方 bin sh ex...
Qt 發布應用程式
qt 官方開發環境使用的動態鏈結庫方式,在發布生成的exe程式時,需要複製一大堆 dll,如果自己去複製dll,很可能丟三落四,導致exe在別的電腦裡無法正常執行。因此 qt 官方開發環境裡自帶了乙個工具 windeployqt.exe。以官方 qt 5.8.0 mingw 開發環境為例,從開始選單...