Linux打包免安裝的Qt程序(編寫導出依賴包的腳本copylib.sh,程序啟動腳本MyApp.sh)


本文介紹如何打包Qt程序,使其在沒有安裝Qt的系統可以運行。

默認前提:另外一個系統和本系統是同一個系統版本。

1,編寫導出依賴包的腳本copylib.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

更改可執行權限

chmod u+x copylib.sh
  • 1
  • 2

2,打開終端並進入到存放程序的(假設叫MyRelease)文件夾,運行下面命令(假設程序叫MyApp)

./copylib.sh MyApp
  • 1
  • 2

在此目錄下會自動生成lib文件夾,腳本實際上是調用了 ldd MyApp指令獲得MyApp運行時需要哪些庫,並將庫都復制放到當前目錄的lib文件夾中。

3、把lib里的所有文件剪切到 MyRelease目錄下,並刪除此lib文件夾。

4、進入QT的安裝目錄,找到platforms文件夾,本文路徑是

/opt/Qt5.3.1/5.3/gcc_64/plugins/platforms/
  • 1
  • 2

將整個platforms文件夾復制到MyRelease文件夾中,注意:這時復制的是整個文件夾,這使得MyRelease文件夾中會多出一個platforms文件夾。

5、將上文的copylib.sh放到MyRelease/platforms/中,並運行

./copylib.sh libqxcb.so
  • 1
  • 2

這時在當前目錄會得到新的lib文件夾。 
將lib里的所有文件剪切到 MyRelease目錄下,並刪除此lib文件夾

6、在MyRelease文件夾中新建程序啟動腳本MyApp.sh(腳本名稱和App名稱相同)

#!/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 "$@"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

更改可執行權限

chmod u+x MyApp.sh
  • 1
  • 2

7、測試程序 
修改Qt的安裝路徑名稱,如 /opt/Qt5.3.1/5.3 修改為 /opt/Qt5.3.1/5.311, 
修改后,運行程序時就不能找到安裝目錄里的庫文件了。

sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
  • 1
  • 2

這樣就可在本機上做測試了。

在MyRelease文件夾下運行

./MyApp.sh
  • 1
  • 2

可能會報錯:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解決辦法:

如果你修改了Qt安裝路徑名稱,現在先修改回來,如:

sudo mv /opt/Qt5.3.1/5.311 /opt/Qt5.3.1/5.3
  • 1
  • 2

在MyRelease文件夾發現存在了一個libQt5DBus.so.5庫文件,但他只是一個符號鏈接,需要把它補全。

[user@localhost]$ locate libQt5DBus
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.la
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.prl
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
... 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

把這兩個庫文件

/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
  • 1
  • 2
  • 3

拷貝到MyRelease文件夾下,然后再次運行啟動腳本。

先修改路徑(用以本地測試)

sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
  • 1
  • 2

運行啟動腳本

./MyApp.sh
  • 1
  • 2

OK,程序啟動成功。

現在可以把MyRelease打包成壓縮包,拷貝到其他系統上去運行了。

友情提示,測試完畢,如果修改了Qt安裝路徑,不要忘記再修改回來。


本文參考:http://blog.csdn.net/z3512498/article/details/64922180

官網參考: http://doc.qt.io/qt-5/linux-deployment.html

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zbc415766331/article/details/78108466


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM