Ubuntu版本:18.04
QT版本:5.7.0
例如程序名为GPIO-TEST
找个目录创建文件夹用来存放打包的程序,
/zdisk/MY_GPIO-TEST
将工程用Release模式编译,直接运行项目就行了
打开编译出文件夹的文件,我的路径如下:
/zdisk/qt-project/build-GPIO-TEST-Desktop_Qt_5_7_0_GCC_64bit-Release
在Release文件夹创建文件copylib.sh,并修改权限为777,文件内容如下:
1
2
3
4
5
6
7
8
9
10LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir打开终端进到当前文件夹,输入./copylib.sh GPIO-TEST,会产生一个lib文件夹,这里称为GPIO-TEST库文件
脚本实际上是调用了ldd GPIO-TEST指令获得GPIO-TEST运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中
将GPIO-TEST的二进制文件和GPIO-TEST的库文件夹里的所有的文件复制到MY_GPIO-TEST文件夹中
进入QT的安装目录,找到platforms文件夹,我的路径如下:
/opt/Qt5.7.0/5.7/gcc_64/plugins/platforms
将上文的copylib.sh放到platforms文件夹中,并运行
./copylib.sh libqxcb.so
,这时会得到libqxcb.so的库文件夹将libqxcb.so的库文件夹的所有文件和platforms文件夹复制到MY_GPIO-TEST文件夹中
在MY_GPIO-TEST文件夹中新建脚本GPIO-TEST.sh,执行chmod 777 GPIO-TEST.sh,并在其中加入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12#!/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 "$@"到这里就基本完成了,将MY_GPIO-TEST文件夹复制到需要运行程序的目标主机即可,在目标主机中,运行程序,都采用 ./GPIO-TEST.sh 而不是./GPIO-TEST,即运行程序的sh脚本,而不是二进制文件
以上就是在ubuntu下使用脚本打包QT程序的方法!
参考链接:https://blog.csdn.net/z3512498/article/details/64922180