如何打包我們用 Qt 寫的軟體 - Linux 篇
本文主要講解如何在 Linux 下打包分發我們寫的程序。
概述
這部分內容其實官方文檔已經有介紹,包括三部分內容:「Qt for Linux/X11 - Deployment」、「Qt for Windows - Deployment」和「Qt for MacOS - Deployment」。看起來還是很簡單的,如果不想看官文的話,我以自己的實際項目為例,說明如何在 Linux 下打包我們的程序。
本文目錄結構:
一、準備兩個腳本
- ldd.sh腳本
- hubeihdbtoexcel.sh腳本
- 給兩個腳本加許可權
二、打包過程
- 1.添加程序依賴庫
- 2.添加 Qt 相關依賴庫
三、驗證
某個湖北現場需要將資料庫中的數據輸出為Excel文件。現場機器環境為Qt4,由於導出Excel文件的第三方庫需要在Qt5環境下編譯,因此該教程的目的是在現場機器不安裝Qt5的情況下能正常運行Qt5編譯的程序。
程序名:hubeihdbtoexcel
一、準備兩個腳本
- ldd.sh腳本
#!/bin/bash
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done
- hubeihdbtoexcel.sh腳本
注意該腳本的名稱必須和程序名一致。
#!/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 "$@"
給這兩個腳本加許可權
sudo chmod 777 ldd.sh
sudo chmod 777 hubeihdbtoexcel.sh
二、打包過程
打包過程分為:添加程序依賴庫和Qt依賴庫。
- 添加程序依賴庫
(1)新建一個空的文件夾,用於存放程序及其動態庫。例如「ExportToExcel文件夾」;
(2)將ldd.sh腳本複製到編譯目錄,如「build-hubeihdbtoexcel-Desktop_Qt_5_5_1_GCC_32bit-Release」;
(3)執行「./ldd.sh hubeihdbtoexcel」,會在當前目錄生成lib文件夾。其中存放著運行hubeihdbtoexcel所依賴的庫文件;
(4)將lib文件夾中的所有文件複製到第1步新建的文件夾「ExportToExcel文件夾」中。至此,就可以刪除生成的lib文件夾和ldd.sh腳本了
2. 添加 Qt 相關依賴庫
(1)將ldd.sh腳本複製到Qt5安裝目錄的platforms文件夾中;
(2)執行「./ldd.sh libqxcb.so」,將生成的lib文件夾中的所有文件拷貝到「ExportToExcel文件夾」中。有些庫可能重複,點擊「替換」即可。執行完該步驟後就可以刪除生成的lib文件夾和ldd.sh腳本了;
(3)返回上一級,將platforms整個文件夾拷貝到「ExportToExcel文件夾」中,層級關係如下圖;
(4)該步驟為可選步驟。如果所編寫的程序有操作資料庫的動作,還需要將與platforms同級目錄中的sqldrivers文件夾也拷貝到「ExportToExcel文件夾」中;
(5)最後將hubeihdbtoexcel.sh腳本拷貝到「ExportToExcel文件夾」中即可。然後將整個「ExportToExcel文件夾」壓縮就可以在其他機器上解壓縮後運行。
三、驗證
(1)將壓縮包解壓;
(2)執行「./hubeihdbtoexcel.sh」,程序正常運行。
推薦閱讀: