以下使用的qt版本为5.11.2,
1. 先创建一个文件夹,用于放置需要打包的所有文件,我创建了一个叫control_client的文件夹,
2. 编译Qt工程,生成Release版本的可执行文件,下图表示了生成可执行文件的路径和可执行文件control_client,
3. 拉取可执行文件所需的依赖库:打开上图中的输出路径,新建一个脚本文件copylib.sh,内容如下,并执行脚本:./copylib.sh control_client,
#!/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
(该脚本的含义为:提取control_client的所有依赖库放入到当前目录下的lib文件夹中,实际就是调用ldd命令实现的。)
4. 将生成的可执行文件拷贝到第1步创建的文件夹中,
5. 将第3步生成的lib文件夹中的所有库拷贝到第1步创建的文件夹中,注意:拷贝的库与可执行文件在同级目录下,
6. 查找Qt平台需要的依赖库:进入Qt的安装路径下,找到平台所需依赖库位置,大部分版本的依赖库路径都在platforms文件夹中,下图中为我的安装路径:
7. 将第3步中的脚本文件copylib.sh复制到上图的Qt平台库路径下,执行./copylib.sh libqxcb.so,同样也会在该路径下生成一个lib文件夹,该文件夹中存放的是libqxcb.so库的依赖文件。
8. 将第7步中生成的lib文件夹内的所有库拷贝到第1步创建的文件夹control_client中,注意:拷贝的库与可执行文件在同级目录下,
9. 删除Qt路径中生成的lib文件夹和拷贝进去的copylib.sh脚本,
10. 将Qt平台库的整个platforms文件夹都拷贝到第1步创建的文件夹control_client中去,注意:platforms文件夹与可执行文件在同级目录下,
11. 以上便完成了整个Qt程序的所有依赖库拷贝,目前第1步创建的文件夹中的所有文件即是运行程序需要的所有Qt组件,
12. 在第1步创建的文件夹中新建一个脚本,脚本名与可执行文件名相同,本文叫control_client.sh,输入以下内容:
#!/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 "$@"
(脚本主要是用来配置可执行程序运行是的依赖库路径的。)
13. 最终第1步创建的文件夹中包含的文件目录如下所示,如需在其他计算机上运行,拷贝整个文件夹即可。
14. 【可选】如果上步骤的文件夹需要进行压缩,可以采用各种方式压缩,但是使用tar命令压缩时,最好加上 -h 参数。