前言最近研究ubuntu上的Qt打包遇到了很多問題,雖然有個LinuxDeployQt,但是這貨有個很大的缺點,那就是它打包的程序在運行的時候會把自己釋放到一個臨時目錄運行,這樣就導致了我們的程序設置當前運行目錄有誤,導致相對路徑之類的東西全部撲街。所以我們需要一個新的辦法。在調查了一段時間后,最終找到解決方案,并學會了deb安裝包的制作 環(huán)境系統(tǒng):ubuntu 16.04 Qt程序:TestQt Qt版本:5.12.4 分析要實現(xiàn)我們最終的目的,需要解決下面幾個問題:
方案問題 1我們需要指定一個LFLAGS的參數(shù),這里是指定程序所在目錄下的lib目錄 -Wl,-rpath,'$$ORIGIN/lib' 這個參數(shù)就可以指定程序運行時候的優(yōu)先加載路徑,如果用的是QtCreator,那么我們修改pro工程文件 QMAKE_LFLAGS += -Wl,-rpath,\'\$$ORIGIN/lib\' 注意:這里一定要用 問題 2這個只需要使用ldd來查找依賴,并自動拷貝到我們app下的lib目錄即可,在程序目錄建了一個腳本 #!/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 假設我們的Qt程序為 注意:如果是打包Qt,那么要注意xcb的問題,我們需要額外拷貝兩個Qt庫進來, 問題 3這個就是使用qt.conf文件了,內容如下: [Paths] Prefix=./ Libraries=lib Plugins=plugins 問題 4目錄說明首先我們需要建立一個目錄結構,這里拿TestQt的舉例,不含文件 TestQt-Package/ └── project ├── DEBIAN └── usr ├── local │ └── TestQt | ├── lib │ ├── plugins │ │ ├── bearer │ │ ├── imageformats │ │ ├── platforms └── share ├── applications └── icons └── hicolor └── 64x64 └── apps 這里的project就是我們要打包成 deb 包的工程文件夾,內容主要是 DEBIAN:這個文件夾是 deb 配置信息文件夾 applications:這里是放置程序的快捷方式的,用來在 ubuntu 程序菜單中顯示你的程序 icon:這里放置你的程序圖標,png格式,這里是64x64的分辨率,請根據(jù)自身圖標大小挑選對應分辨率文件夾放置 我們的程序位于 /usr/local/TestQt 下面,當然,你也可以放到其他地方,參考上面的目錄結構即可 文件說明首先我們了解一下 linux的快捷方式文件,linux的快捷方式 是 desktop 格式,類似windows的 lnk,示例文件(TestQt.desktop)如下 [Desktop Entry] Categories=Utility; Comment=a test Exec=/usr/local/TestQt/TestQt GenericName=TestQT project Icon=TestQt.png Name=TestQt Name[zh_CN]=TestQt測試程序 Type=Application Version=1.0.0 這里做個簡單的說明 Exec:這個字段是執(zhí)行路徑,如果你的程序直接放到/usr/bin之類的地方,那么你可以直接寫 TestQt,而不需要完整路徑 Icon:這個是圖標路徑,默認會從 /usr/share/icons下面去找,如果你按照上面目錄結構放入了 TestQt.png ,那么就可以直接寫圖標名字。如果沒有,比如你放到了程序目錄,那么就需要寫上完整路徑 Name:這個可以加上locale來支持多語言 接著我們熟悉一下 package: TestQt version: 1.0.0 architecture: amd64 maintainer: magicdmer description: a test project 都放好后,我們就在 TestQt-Package 目錄下運行下面的命令打包 dpkg -b project/ TestQt_ubuntu_amd64.deb 終于完畢 |
|