本文介紹如何打包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安裝路徑,不要忘記再修改回來。