在Linux 下打包免安装的QT5程序

前提条件:

程序名称:test

程序源代码所在目录:test_proj

QT版本:5.9.9

1.执行以下命令,跳转到当前用户的家目录,创建test目录,用来存放test程序的运行文件

cd ~
mkdir test

2.将工程使用Release模式编译(cmake方式编译出来就是release)

3.跳转到/test_proj/build/(不同的编译方式编译的目录文件夹名称不同)文件夹下,执行以下命令,创建copylib.sh脚本,通过指令设置权限chmod 777 copylib.sh

touch copylib.sh     //创建copylib.sh脚本
chmod 777 copylib.sh   //给copylib.sh添加可执行权限
gedit copylib.sh   //使用gedit打开copylib.sh脚本

在打开的copylib.sh脚本中,添加以下内容:

#!/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

4.在build文件夹下,执行./copylib.sh test  (test为第2步编译出来的二进制文件),执行完之后,在build目录下,会生成lib文件夹

5.将第2步生成的二进制文件(test)和第4步生成的lib文件夹下文件拷贝到第1步创建的test文件夹中(只拷贝lib中的文件)

6.进入QT的安装目录,找到platforms文件夹,笔者的路径是:

/opt/Qt5.9.9/5.9.9/gcc_64/plugins/platforms

将整个platforms文件夹拷贝到第1步创建的test文件夹

7.将第3步中创建的copylib.sh放到/test/platforms/中,并运行./copylib.sh libqxcb.so,这时会得到lib文件夹

8.将第7步中生成的lib文件夹中的所有文件拷贝test文件夹中,然后删除掉test/platforms/lib文件夹

9.在test文件夹中新建脚本run.sh,执行chmod 777 run.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 "$@"

10.运行程序,执行./run.sh

=========================================================================

注意:

本人在实际操作中,以上运行完出现了以下几个问题:

1.报一些第三方库未加载的问题,由于本人依赖其他第三方库,而在打包的时候未将这些第三方库的.so文件加进去,导致报错,所以如果有依赖第三方库的话,也需要将依赖的第三方库的so也添加到test目录下。

2.除了上面这个问题,在运行程序的时候报出以下问题:

 遇到这个问题,首先在终端下执行:export QT_DEBUG_PLUGINS=1

然后在重现运行程序:./run.sh

这样就会打出详细的信息,便于检查。

 从以上详细信息可以看出,没有找到libQt5XcbQpa.so.5这个库。可是在test目录下,搜了之后发现是有这个库的。。。(原因没弄清楚。。)

解决方案:

在/opt/Qt5.9.9/5.9.9/gcc_64/lib目录下,找到libQt5XcbQpa.so.5这个库

 我们将libQt5XcbQpa.so.5.9.9拷贝到test目录下,然后删除原来的libQt5XcbQpa.so.5,并将libQt5XcbQpa.so.5.9.9重命名为libQt5XcbQpa.so.5。

然后继续执行:./run.sh

 不幸,还是报错,提示找不到libQt5DBus.so.5这个库。于是我又在test目录下搜了一遍,发现还是有这个库的。还能怎么办,重复上面的步骤:

在/opt/Qt5.9.9/5.9.9/gcc_64/lib目录下,找到libQt5DBus.so.5这个库

 我们将libQt5DBus.so.5.9.9拷贝到test目录下,然后删除原来的libQt5DBus.so.5,并将libQt5DBus.so.5.9.9重命名为libQt5DBus.so.5。

然后继续执行:./run.sh,程序运行成功。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值