最近写了几个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,可能会导致某些错误,这时就要根据具体的错误提示来修改。