Linux上Qt程序的发布

近写了几个Qt小程序,打包时忘了添加动态库,导致在另一台电脑上无法运行,所以查找了一下Linux下打包的方法,在这里做一个记录。这个方法主要参考了这篇文章

准备

先生成可执行程序,可以用Qt Creator生成,也可以用qmake手动构建。

编写脚本

在程序目录下创建一个与程序同名的shell脚本。如程序为app,则创建app.sh

编写脚本内容,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash  
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 "$@"

编写另一个脚本,用于复制所需的动态库到当前目录下,暂命名为pack.sh

1
2
3
4
5
#!/bin/sh  
exe="app" #你需要发布的程序名称
des="/path/to/app" #创建文件夹的位置
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

运行脚本

首先运行pack.sh,将动态库复制完成。

将文件打包。

在另一台电脑上解压后,进入程序目录,用命令行运行app.sh,即可。

备注

因为Qt的版本不同,而且有的Linux上面装了不同版本的Qt,可能会导致某些错误,这时就要根据具体的错误提示来修改。

updatedupdated2021-06-072021-06-07