Linux打包發布qt應用程式

2021-10-21 16:57:05 字數 1686 閱讀 7969

四.編寫執行指令碼

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 開發環境為例,從開始選單...