项目场景:

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 DbDetectchmod +x DbDetect.sh,然后执行./DbDetect.sh即可运行软件。

09-06 07:52