Linux下QT打包发布——支持(龙芯|银河|方德|CentOS|Ubuntu)


独恋花尽散lym
独恋花尽散lym 2022-09-29 09:54:09 49901
分类专栏: 资讯

1.基于第三方工具:linuxdeployqt (官网下载的可执行程序仅支持x86_64架构,其他架构需自行下载源码编译方可运行)

1).github上有编译好的可执行程序:https://github.com/probonopd/linuxdeployqt/releases
在这里插入图片描述

2).将下载后的文件赋予权限,并放入/usr/local/bin目录中

chmod 777 linuxdeployqt-6-x86_64.AppImage
mv linuxdeployqt-6-x86_64.AppImage /usr/local/bin
="token punctuation">), build 631 built on 2019-01-25 22:47:58 UTC
  • 1
  • 2

3).配置QT环境变量

vi /etc/profile    打开文件
  • 1

在尾部添加内容如下:(/opt/Qt5.12.2是我的QT安装路径,请自行替换),然后保存并退出vi

export PATH=$PATH:/opt/Qt5.12.2/5.12.2/gcc_64/lib/:/opt/Qt5.12.2/5.12.2/gcc_64/lib:/opt/Qt5.12.2/5.12.2/gcc_64/include:/opt/Qt5.12.2/5.12.2/gcc_64/bin
  • 1
source /etc/profile  重新加载配置,使环境变量生效
  • 1

4). 新建一个文件夹如test,将编译的可执行文件拷贝进去,比如执行文件叫checkServer 执行ldd checkServer 确定动态库是否都能找到,如遇到xxxxx not found 则需要配置对应的so路径到LD_LIBRARY_PATH环境变量中;

  • 比如我项目中有一个lib目录专门存放第三方so库,ldd命令执行后 这些库找不到,则需要把该lib目录添加到LD_LIBRARY_PATH环境变量中: (/home/test/checkServer是我的项目目录)
vi /etc/profile  
export LD_LIBRARY_PATH=/home/test/checkServer/lib:$LD_LIBRARY_PATH

source /etc/profile 重新加载环境变量
ldconfig 将新的动态链接库为系统所共享
  • 1
  • 2
  • 3
  • 4
  • 5

5).一切准备就绪,输入打包命令并等待打包完成即可。

linuxdeployqt-6-x86_64.AppImage checkServer -appimage
  • 1

2.基于shell脚本方式拷贝相应依赖文件 (推荐非x86_64的一些国产系统使用)

1).首先执行第一种方法的第4步 (如新建目录名为 test,下面所有test都表示我们的打包目录)

2).在test中新建脚本copy.sh

!/bin/bash
LibDir=$PWD"/lib"  获取lib目录路径
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)   创建lib目录
for Variable in ${lib_array[@]}  循环所有依赖的动态库路径
do
    cp "$Variable" $LibDir  拷贝到lib目录中
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3).给脚本赋予权限

chmod 777 copy.sh
  • 1

4).执行脚本,参数是可执行文件名

./copy.sh checkServer 
  • 1

5).将生成的lib目录中的所有文件移动到上层,与可执行文件同级,然后将lib目录删除

6).进入QT安装目录的/opt/Qt5.12.2/5.12.2/gcc_64/plugins/platforms 将copy.sh放到该目录下并执行./copy.sh libqxcb.so 在这里插入图片描述

7). 将生成的platforms整个目录移动到test下,将lib中的所有文件放到test目录下(即test/platforms/lib* 移动到test),然后将test/platforms/的lib目录及copy.sh脚本文件删除

8).在test目录下编写.sh运行脚本,脚本名必须与可执行程序一致,比如这里叫checkServer.sh(因为如果目前将程序发送到其他电脑上,执行程序则因系统无法获取so库路径,将无法运行)

!/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 "$@"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

9).赋予运行脚本权限

Chmod 777 checkServer.sh
  • 1

10).现在可以将test目录拷贝到其他主机上,通过./checkServer.sh来运行 (脚本作用是在运行可执行文件前,先将test目录中的依赖库路径加入到环境变量中,使系统知道这些库的存在)

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux17944 人正在系统学习中

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10937
赞同 0
评论 0 条
独恋花尽散lymL0
粉丝 0 发表 4 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2950
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  158
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!