1. 程式人生 > >Qt5專案打包

Qt5專案打包

筆者本來想嘗試將專案在Windows環境和Linux環境下都打包釋出,但是Linux環境下各種辦法都嘗試了,還是有點問題,先總結記錄下吧。
參考文章:https://blog.csdn.net/windsnow1/article/details/78004265
http://www.cnblogs.com/lvdongjie/p/7250547.html
http://doc.qt.io/archives/qt-4.8/deployment-x11.html

一、Windows環境下Qt5打包釋出

QT開發的程式釋出的時候經常採用兩種方式:

1 靜態編譯,可生成單一的可執行檔案。
2. 動態編譯,需同時附上需要的dll檔案。

這裡採取動態編譯,然後第三方軟體將其“組合”為單一檔案的辦法。
軟體環境:win10
軟體 名:Qt5.9.1MinGW版本,可以到這裡下載Qt官網

這裡以一個QT五子棋程式為例,進行測試:

使用Qt Creator釋出

1,首先在Debug模式下,執行檢查程式無誤後,將工程在Realease模式下執行:
Release版本去除了除錯資訊,依賴庫也進行了調整,使得執行效率都相對較高。
在這裡插入圖片描述
2,此時,在工程路徑下就會生成含有Realease關鍵字的資料夾:
在這裡插入圖片描述
3,開啟這個資料夾,將可執行程式exe拷貝出來,這裡我們在E盤根目錄下建一個新的資料夾output,將其拷貝到這裡:
在這裡插入圖片描述


(我們的目的是在新的資料夾內,找出可執行程式所有的依賴檔案)
4,在win10環境下,搜尋qt,開啟“Qt 5.9.1 for Desktop (MinGW 5.3.0 32 bit)”,切換路徑到步驟3所建立的資料夾,然後執行命令:

windeployqt  QtWuziqi.exe

在這裡插入圖片描述
這一步操作是將所需的庫檔案全都拷貝到exe程式的當前檔案,此時我們便生成了含有動態連結的釋出可執行程式,可以將整個資料夾拷貝測試。
5,(可選)接下來就可以用Enigma VirtualBox軟體虛擬化工具將多個檔案封裝到應用程式主檔案,從而製作成為單執行檔案的綠色軟體。
開啟執行Enigma Virtual Box,新增路徑和檔案,將output資料夾所有檔案拖入到框內,在彈出框【Files Options】中可以選擇是否將檔案壓縮,確認後即可執行打包:
在這裡插入圖片描述


在這裡插入圖片描述
打包完成後,我們在Windows環境下打包工作就完成了,去程式打包後的路徑點選執行吧。
在這裡插入圖片描述


二、Linux環境下Qt5打包釋出

筆者測試的時候出現了一點問題,這裡先記錄下吧。
參考:linux Qt程式打包
https://blog.csdn.net/t980832453/article/details/79635556
https://blog.csdn.net/u014746574/article/details/79288727

Linux環境下打包,首先要確認是否打包僅僅為Linux X86_64環境下的,如果是選擇使用linuxdeployqt-x86_64.AppImage完成,如果還需要考慮其他平臺,選擇qmake+linuxdeployqt+patchelf完成。

主要參考官網指南

安裝前提:
1)檢檢視下當前使用的qmake是否為你需要的版本

qmake -v 

由於Ubuntu自帶有qmake工具,如果不是所安裝qt軟體中的qmake,需要到defalut.conf中修改編輯下。
2)新增環境變數

export PATH=/home/pp/Qt5.9.1/5.9.1/gcc_64/bin:$PATH;
export LD_LIBRARY_PATH=/home/pp/Qt5.9.1/5.9.1/gcc_64/lib:$LD_LIBRARY_PATH; 
export QT_PLUGIN_PATH=/home/pp/Qt5.9.1/5.9.1/plugins:$QT_PLUGIN_PATH;
export QML2_IMPORT_PATH=/home/pp/Qt5.9.1/5.9.1/qml:$QML2_IMPORT_PATH;

3)安裝linuxdeployqt和安裝patchelf-0.9

# linuxdeployqt安裝到/usr/bin路徑下,驗證
linuxdeployqt -version

#patchelf安裝
cd patchelf-0.9/
./configure  && make && sudo make install

4)使用linuxdeployqt和其他指令碼檢測安裝可執行程式的依賴

 linuxdeployqt  QtWuziqi -appimage

網路是一些指令碼核心是利用ldd檢測出所有依賴並拷貝

#!/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

最後移植後總是報錯:
This application failed to start because it could not find or load the Qt platform plugin “xcb”
解決辦法的文章:

stackoverflow討論
部落格園思路

大家可以一塊探討下,非常感謝!