本文主要講解如何在 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. 添加程序依賴庫

(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」,程序正常運行。


推薦閱讀:
查看原文 >>
相关文章