项目场景:
Qt 提供了一个打包工具,叫做 deployqt,可以将应用程序所依赖的库文件都提取出来,并且支持跨平台。在 Windows 系统叫 windeployqt,在 Linux 系统叫 linuxdeployqt,在 Mac 下叫 macdeployqt。但是公司的破网下载个linuxdeployqt一直下载不下来,就找了另一种方法,记录下来,方便好用
解决方法
1.在Qt Creator中将需要打包的项目配置为Release模式,然后构建项目,在Release目录下生成可执行文件(例:DbDetect);
2.新建一个文件夹作为输出目录(例:output(绝对路径为 /home/output)),将Release目录下的可执行文件DbDetect拷贝到输出目录output,并执行
chmod +x DbDetect
3.打开终端,cd到输出目录output中(绝对路径为 /home/output),然后执行 ldd DbDetect
可以查看DbDetect依赖的所有库,然后将所有依赖的库拷贝至output文件夹下。这个操作比较繁琐,所以我们直接用脚本一次性拷贝,在output文件夹下新建cplib.sh,将以下内容粘贴至cplib.sh中:
#!/bin/sh
exe="DbDetect" #修改发布程序的名称
des="/home/output/" #修改输出可执行文件路径
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
4.在终端执行chmod +x cplib.sh
,然后执行 ./cplib.sh
,此时所有依赖的库均被拷贝至output文件夹下。
5.在output文件夹下新建DbDetect.sh文件,注意这里文件名一定是(可执行文件名 + .sh),将以下内容拷贝至DbDetect.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 "$@"
6.执行chmod +x DbDetect.sh
,软件至此打包完成。注意:运行软件的时候,执行的是 ./ DbDetect.sh
, 而不是直接运行DbDetect。
7.将输出文件夹拷贝至目标平台上会丢失执行权限,可以执行chmod +x DbDetect
和chmod +x DbDetect.sh
,然后执行./DbDetect.sh
即可运行软件。