Qt on Linux 使用deb打包發佈

Distribute Qt APP on PPA of Ubuntu using the .deb package.

[Abstract]: 在Qt on Linux上開發程序完成後須要脫離本機所營造的開發庫環境變量運行,則須要對二進制執行文件進行打包發佈。在Ubuntu系統中一般使用deb格式文件對二進制安裝包進行封裝。Ubuntu系統提供了我的軟件包(Personal Package Archives, PPA)在線安裝deb功能。本文闡述在Linux系統中使用Qt編譯生成的二進制文件收集*.so庫文件過程、Ubuntu的deb打包過程,完成從Qt編譯生成的二進制文件到發佈到Ubuntu我的軟件包文檔全過程。html

1. 收集支持庫文件

使用Qt Creator開發的項目工程文件在release或debug模式下生成的二進制文件依賴於Qt Creator的環境變量,這是一個Qt運行庫完整的環境變量。當二進制文件脫離該環境會提示加載依賴庫失敗。Linux系統ldd命令(ldd app)能夠顯示二進制文件依賴庫。文獻1提供了自動收集庫文件的腳本。c++

對其進行改造命名爲qt-lib-collect.sh,輸入參數1目標文件,輸入參數2庫文件存儲路徑。shell

#!/bin/sh
# 可執行程序名
appname=$1
# 目標文件夾
dst=./$2
# 利用 ldd 提取依賴庫的具體路徑
liblist=$(ldd $appname | awk '{ if (match($3,"/")){ printf("%s "), $3 } }')
# 目標文件夾的檢測
if [ ! -d $dst ];then
                mkdir $dst
fi
# 拷貝庫文件和可執行程序到目標文件夾
cp $liblist $dst
cp $appname $dst

eg: ./qt-lib-collect.sh app out_dirjson

2. 使用deb打包

文獻2提供整理了方法。使用deb打包,須要先建立符合deb格式規則的文件夾。在deb包中包括,DEBIAN目錄和目標軟件安裝路徑文件夾,例如,建立mydebpac文件夾,符合deb格式的最小文件夾結構爲:bash

  • 文件夾DEBIAN,規定包含changlog contro copyright postinst postrm prerm文件,這些文件對deb進行描述,須要按照deb定義的字段格式填寫。
  • 文件夾/opt:視爲用戶使用dpkg -i安裝該deb時,該包的安裝文件會解壓到用戶的/opt路徑下,同理若設定爲/usr,則會解壓到/usr下。
  • 文件postinst:腳本文件。在文件目錄拷貝後執行。相應地,preinst爲文件安裝前執行腳本。
  • 文件prerm:腳本文件。在文件目錄卸載掉前執行。相應地,postrm爲文件卸載後的執行腳本。
  • 文件contro:deb文件包描述,其內容有包名稱、版本、依賴庫、包介紹等。

全部的腳本文件,都須要預先給定執行權限chmod +x ....app

2.1 contro文件

Package: tinySerial
Version: v1.1
Section: free
Priority: optional
Depends: libssl.0.0.so, libstdc++2.10-glibc2.2
Suggests: Openssl
Architecture: amd64
Installed-Size: 61952
Maintainer: carlos.wei.hk@gmail.com
Provides: mysoftware
Description: tinySerial is a opensource GUI serial port debug software on Linux.

2.2 postinst文件

在postinst內能夠寫一些處理快捷方式、配置環境變量的操做。ide

# !/bin/sh
cp /opt/tinyserial/tinyserial.desktop /usr/share/applications
cp /opt/tinyserial/tinyserial /usr/bin

筆者會作兩個處理:post

  1. 將*.desktop文件複製到app中心,路徑/usr/share/applications
  2. 將二進制可執行文件複製到/usr/bin

2.3 postrm文件

與postinst回滾執行的文件。spa

# !/bin/sh
rm /usr/share/applications/tinyserial.desktop
rm /usr/bin/tinyserial

2.4 生成deb包

dpkg -b tinyserial tinyserial-v1.1.deb.net

附錄I 經常使用deb操做命令2

安裝deb包:

dpkg -i mydeb.deb

卸載deb包:

dpkg -r mysoftware

查看deb包是否安裝:

dpkg -s mysoftware

查看deb包文件內容:

dpkg -c mydeb.deb

查看當前目錄某個deb包的信息:

dpkg --info mydeb.deb

dpkg -X mydeb.deb mydeb

解壓deb包中DEBIAN目錄下的文件(至少包含control文件)

dpkg -e mydeb.deb mydeb


  1. 追火車. 【Qt依賴庫】Linux 環境下 Qt 可執行程序依賴庫打包腳本.
  2. 新月時刻. dpkg製做deb包.
相關文章
相關標籤/搜索