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

本文讲述了如何在Qt项目中处理依赖库问题,涉及编译、打包、文件迁移及路径设置,重点解决第三方库缺失和版本冲突,以及运行时库查找问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提条件:

程序名称: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,程序运行成功。

Linux上使用Qt发布可执行程序一般包含以下步骤: 1. **编译应用程序**:首先,你需要确保已经将你的Qt项目构建为可执行文件。这通常是在`src`目录下的`YourProject.pro`工程文件里设置的。运行`qmake`生成Makefile,然后执行`make`来编译。 ```sh qmake YourProject.pro make YourExecutable ``` 确保替换`YourExecutable`为你项目的实际名称。 2. **选择打包格式**:Qt支持多种格式,如`.desktop`文件用于桌面环境,`.tar.gz`或`.zip`用于简单的压缩,`.appimage`用于跨平台免安装等。`.AppImage`是一种流行的选择,因为它不需要依赖环境,可以直接在终端运行。 3. **打包成AppImage**:如果你选择了AppImage,可以使用`Flatpak`工具或者Qt提供的`PackageCreator`工具来制作。例如,使用`flatpak-builder`: ```sh flatpak build --runtime your-runtime-app-dir YourProject.AppDir ``` 这里的`your-runtime-app-dir`是你的应用需要的依赖文件夹。 4. **测试并签名校验**:打包完成后,务必在目标系统上进行测试,确认一切正常。还可以使用`sha256sum`检查校验码以确保文件完整无损。 5. **分发**:将AppImage文件上传到你的服务器或发行渠道供用户下载。你可以将其放到网站的下载区,也可以在应用商店注册发布。 6. **权限处理**:如果需要对文件或目录有特定权限,记得在打包时指定相应的权限。 7. **文档和用户指南**:提供详细的安装和使用指南,以便用户能顺利安装和运行你的程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值