在Linux 下如何打包免安装的QT程序

在Linux 下如何打包免安装的QT程序#

近期学习qt,做好的程序需要打包,离开qt环境运行,在网上找到很多大佬的教程,感觉有些操作有困难,总结一下流程

主要分为以下几种:

  1. 打包成安装包形式;
  2. 打包成二进制文件,附带运行库的形式:
  • windows下,有很多工具,教程也比较多,运行库基本是dll文件
  • linux下,需要靠脚本协助,很多教程都不完整,运行库基本是so文件

这里只演示如何在linux下打包免安装程序,程序名称为demo,QT版本是5.7.1,以下如出现这个名称,则一律替换成读者自己的应用程序名称。
0、找个地方,比如桌面,创建空文件夹demo,这个将用来存放demo程序的运行文件
1、先将工程使用Release模式编译 (qtcreator操作这里就不详细介绍了)
2、打开编译输出文件的文件夹(带二进制文件demo的那个)

我的文件夹名称是build-exp5-desktop-Release

3.在上一步的文件夹中新建文件copylib.sh,通过指令设置权限chmod 777 copylib.sh**

4.在 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

5、打开终端并进入到当前文件夹,输入./copylib.sh demo

其中, giptables 是运行copylib.sh 脚本的参数,脚本实际上是调用了 ldd giptables指令获得giptables运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。

运行完上述指令后,同目录下会生成lib文件夹,这里我们将其称作demo的库文件夹,避免与下文内容混淆

6、将demo的二进制文件和 demo的库文件夹里所有的文件复制到demo文件夹中,注意:这里是把lib里的所有文件复制出来,不用复制lib文件夹

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

我的目录是/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms
将整个platforms文件夹复制到demo文件夹中,注意:这时复制的是整个文件夹,这使得demo文件夹中会多出一个platforms文件夹

8、将上文的copylib.sh放到demo/platforms/中,并运行./copylib.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹
ps:为什么是libqxcb.so呢?具体看文末的参考资料,这个跟你要运行的程序有关,需要用到哪些QT的库,就再打包对应的东西。

9、将libqxcb.so的库文件夹中的所有文件复制demo文件夹中,然后删除掉demo/platforms/lib文件夹

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

到这里就基本完成了,将demo文件夹复制到需要运行程序的目标主机即可,在目标主机中,运行程序,都采用 ./demo.sh而不是./demo,即运行程序的sh脚本,而不是二进制文件

我都是了一下按照上面一步步走,就可以完成打包,程序可以离开qt环境运行,如果想增加桌面快捷方式,自己可以做一个快捷方式,这里就不一一细说了,下面是快捷方式图标代码,自己修改一下名称和目录

[Desktop Entry]
Name=Android studio
Name[zh_CN]=Android studio
#显示图标
Icon=/opt/android-studio/bin/studio.png
#程序路径
Exec=/opt/android-studio/bin/studio.sh
StartupNotify=true
Terminal=false
Type=Application
Categories=Application;Development;

过程中遇到的问题: 1、运行copylib.sh时报找不到库的错误:必须保证在源文件夹中运行copylib.sh,而不能先将文件复制出来,然后再运行copylib.sh生成lib 2、在目标主机中提示

This application failed to start because it could not find or load the Qt platform plugin “xcb”

这是因为没有生成libqxcb.so的库文件夹,或者没有将生成的文件夹中所有的文件放到demo.sh同一级目录下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值