品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序

2023-06-27 12:36:04 来源:博客园
前言

在ubuntu上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。

注意

本篇文章,最终手动结合几个方式成功,花费不少时间研究,推断是终端直接ldd之后强制进入了一个另外的环境变量,导致无法连接成功,也就是,第一层是成功的,第一层的库又调用ldd依赖的这一步的环境变量被强了。  但是最后通过手动来实现linuxdeplopyqt和编译配置来实现打包部署了。

统信UOS系统版本

系统版本:  


(资料图片)

linuxdeployqt

Linux部署工具linuxdeployqt将应用程序作为输入,并通过将应用程序使用的资源(如库、图形和插件)复制到一个包中使其自包含。结果包可以作为AppDir或AppImage分发给用户,也可以放入交叉分发包中。它可以作为构建过程的一部分,在CMake、qmake和make等系统中部署用C、C++和其他编译语言编写的应用程序。当用于基于Qt的应用程序时,它可以绑定运行应用程序所需的Qt的特定最小子集。

源码下载地址

gitcode地址:https://gitcode.net/mirrors/probonopd/linuxdeployqt

linuxdeployqt编译(统信UOS系统)步骤一:下载解压步骤二:修改源码,去掉gcc版本检查

找到main.cpp源码,将这一段(在192行左右)注释掉(这里通过看源码,实际上是可以通过配置去控制的(研究源码发现的,但是我们不再动作了,只是贴出来):  

还是老方法继续修改:

vi linuxdeployqt-master/tools/linuxdeployqt/main.cpp
步骤三:使用cmake配置
cd linuxdeployqt-mastercmake CMakeLists.txt

因为安装了git与这个工程可能不对,我们直接使用源码修改大法,直接定位到代码给删掉:

vi CMakeList.txt

直接删掉目录下的缓存文件:CMakeCache.txt,然后继续:  

继续cmake CMakeList.txt

步骤四:配置Qt的依赖环境

麒麟系统本身自带了qt5库(未带开发相关的库),而我们使用了另外安装的qt5,所以依赖需要引入我们自己安装的qt5上。  为了方便配置,也不影响系统我们装上cmake的gui版本:

sudo yum install cmake-gui
cmake-gui 

选择对应的路径,然后使用默认unix makefile方式配置:  

步骤五:生成generate步骤六:编译make

切入build目录,并且使用make命令即可:

make

测试程序:  

步骤七:安装到系统目录

没有make install这个,手动移动到/usr/local/bin

sudo cp tools/linuxdeployqt/linuxdeployqt /usr/local/bin/
步骤八:测试是否编译成功linuxdeployqt打包流程(arm看可以,本次pc版本失败)

(PS:虚拟机打包好之后,退回到裸机版本,再测试)  新建一个工程  

然后,找个空目录:  

未打包在开发机上也可以运行(裸机不行):  

这里要将Qt引入环境,为了不影响系统,使用source脚本引入,每次使用之前使用source env.sh引入即可。

touch env.sh

然后输入如下(QT_DIR为安装Qt的路径):

#!/bin/shQT_DIR=/home/yang/Qt5.12.8/5.12.8/gcc_64export PATH=${QT_DIR}/bin:$PATHexport LIB_PATH=${QT_DIR}/lib:$LIB_PATHexport PLUGIN_PATH=${QT_DIR}/plugins:$PLUGIN_PATHexport QML2_PATH=${QT_DIR}/qml:$QML2_PATHexport LD_LIBRARY_PATH=${QT_DIR}/lib:$LD_LIBRARY_PATHecho $PATHecho $LIB_PATHecho $PLUGIN_PATHecho $QML2_PATHecho $LD_LIBRARY_PATH

引入环境:  

下次打包遵循此流程即可,继续打包:  

(PS:这里是没有使用sudo进行的打包的,可能对权限管控比较严格,查看“入坑二”)  下面使用sudo打包:

sudo linuxdeployqt testDemo -verbose2

上面是Qt5Widget的库连接到系统库上去了,版本不一样找不到api  下面是未打包的testDemo在开发机上:  

下面是未打包的testDemo在裸机上:  

手动来实现linuxdeployqt打包步骤一:应用放过去

(这是开发机,直接运行也是可以的)  

步骤二:创建qt.conf

这个文件最重要,他就是调用testDemo应用时候,先加载然后去搜索库路径的配置,没有他则走向系统环境变量了。

touch qt.confvi qt.conf

内容,是我们从另外国产麒麟打包的该文件复制的,如下:  

# Generated by linuxdeployqt# https://github.com/probonopd/linuxdeployqt/[Paths]Prefix = ./Plugins = pluginsImports = qmlQml2Imports = qml

这个时候,我们再运行一次:  

路径从本地开始找了。

步骤三:实现其他三个文件夹依赖的拷贝
ls -lcp /home/yang/Qt5.12.8/5.12.8/gcc_64/translations/ . -rfcp /home/yang/Qt5.12.8/5.12.8/gcc_64/plugins/ . -rfcp /home/yang/Qt5.12.8/5.12.8/gcc_64/lib/ . -rfls -lh

测试本机可运行了:  

(PS:这里是全部copy了库,没有进行依赖裁剪的,暂时不管了,花费时间远超预期了)

步骤四:打包放到裸机上

因为没有裁剪,所以包比较大:

cd ..tar cvf outManual.tar outManualls -l outManual.tar

拷贝到裸机上去。  

步骤五:裸机上测试运行(失败)

还是失败,如下:  

这还是之前一样,libQt5Widget.so.5依赖libQt5Core.so.5,前面是用当前配置的,然后库的依赖库就强制引入到了/usr/lib64,跟之前linuxdeployqt打包一样的问题。  

然后有个念头,于是尝试加上LD_LIBRARY_PATH测试,可以运行成功,具体查看“入坑四”。

步骤六:编译时引入运行时路径pro配置QMAKE_RPATHDIR

为了不在运行时额外添加环境变量,为了打包不出现xcb问题,还得修改一下.pro文件如下图:

# 这里是添加运行应用的时候的运行包,此处避免额外设置LD_LIBRARY_PATHQMAKE_RPATHDIR = ./lib

编译出来,单独将testDemo2放置到原来的部署裸机上:    最终,直接点击可以运行成功。

入坑入坑一:编译linuxdeployqt的依赖Qt路径问题问题

开始编译的时候,让其依赖了系统,直接导致就算引入了其他qt的环境变量,打包也是依赖系统,直接不打包  

原因

怀疑是跟编译linuxdeployqt的依赖有关,所以重做一遍自己安装Qt的cmake。

解决

重做一遍自己安装Qt的cmake后编译,也还是一样的。  

入坑二:linuxdeployqt不复制的问题问题

如前面的入坑,就是不复制,与编译依赖没关系。

尝试

没有办法,直接干linuxdeployqt的main.cpp的源码:  1.先调试哪里没有打印,每次修改源码重新编译之后,部署再打包看输出结果。  (PS:发现qDebug()不输出,输出的是qInfo())  

将所有LogError换为qInfo(),如下图:  

还是不行:  

继续:  

棘手的问题:  

至此可以确认是兼容性问题,这个问题比较棘手,短期内调不好了。

解决

Linuxdeployqt方式暂未解决,可以换个linuxdeployqt的版本,也许不同的uos版本也不会又这个问题了,很奇怪连LogError和qDebug都不出来。  后续,第二天突然想到是否需要sodu权限,尝试了下,确实是的:  

所以又重做,使用sudo来打包了。

入坑三:依赖链接库存在错误问题

这是和系统的冲突了。  编译的时候也是使用的安装包的:  

原因

无解,qmake路径和环境变相也都没有问题  

检查linuxdeployqt  

尝试1

拍快照,然后目录下的所有/usr/lib64/Qt5*删除,首先检查系统是否正常启用,再打包尝试。

sudo rm /usr/lib64/libQt5*

重启,确实,系统起不来了,系统依赖Qt5.11下的库。  

所以不能删除,此路不通。

尝试2

拍快照,然后将安装的Qt5库copy过去,首先检查系统是否正常启用,再打包尝试。  执行copy指令,直接立即黑屏,此路不同。  所以,/usr/lib64下的库是不能动的。  

这里怀疑,从进入终端开始就进入了固定的优先环境变量,只是推测,目前linuxdeployqt又花费半天,暂时仍然无解。

解决方法(有点偏门,失败)

找不到一个库就删掉一个库,此时系统是已经将库加载进内存运行,是不影响正在运行的系统,但是无法重启,如下:

sudo linuxdeployqt testDemo -verbose2sudo rm /usr/lib64/libQt5Gui.so*
sudo linuxdeployqt testDemo -verbose2sudo rm /usr/lib64/libQt5Core.so*
sudo linuxdeployqt testDemo -verbose2sudo cp /home/yang/Qt5.12.8/5.12.8/gcc_64/lib/libicuuc.so* /usr/lib64/
sudo linuxdeployqt testDemo -verbose2sudo cp /home/yang/Qt5.12.8/5.12.8/gcc_64/lib/libicudata.so* /usr/lib64/
sudo linuxdeployqt testDemo -verbose2sudo yum install patchelfsudo linuxdeployqt testDemo -verbose2

可以,uos你赢了,我放弃了!!!

入坑四:手动qt.conf模仿部署还是强制路径切换问题原因

分析该系统第二次搜索库,总是会引入到/usr/lib64,这个问题很操蛋,从一开始linuxdeployqt打包不行就是这个根本原因。

解决

直接在编译的时候,最优先的方式,让应用去运行时先依赖相对路径,而不是去依靠运行时的环境变量和配置文件了。  pro加入配置文件:

# 这里是添加运行应用的时候的运行包,此处避免额外设置LD_LIBRARY_PATHQMAKE_RPATHDIR = ./lib

点击应用运气的时候,应用自身会先依赖./lib下的库查找。

标签:

(责任编辑:)

相关文章

统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序

​前言在ubuntu上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发

2023-06-27 12:36:04

暂时封闭!太平路步行街美颜升级(附效果图)

​6月26日下午,青岛太平路步行街暂时封闭,挖掘机在开挖路面,进行地下

2023-06-27 12:04:18

房子被邻居打通后续:开发商已买回

​近日,有网友在短视频平台上发布视频称,自己两年没去看的房子被邻居占

2023-06-27 11:36:47

贵安新区:持续推进农村“五治” 协同推进“五个振兴”

​6月21日,贵安新区召开创建宜居乡村专项行动动员部署会,宣讲贵安新区

2023-06-27 11:11:20

世界看热讯:淞沪会战简介_淞沪会战介绍

​1、一二八事变又称一二八淞沪抗战,在日本称为上海事变或第一次上海事

2023-06-27 10:49:09

世界聚焦:新全球融资契约峰会闭幕 改革全球金融机构成共识

​为期两天的新全球融资契约峰会日前在法国巴黎闭幕。与会多国领导人和国

2023-06-27 10:28:50

天天速递!6岁男童游泳后感染“食脑虫”,高烧不退,无特效药

​“我本意是带娃娃去见世面,去认识大海,去放松开心,却让我这个妈妈永

2023-06-27 10:08:40

2023年下半年,十二星座谁的人际关系最为和谐,人脉广阔?

​随着社会发展和技术的进步,人们的人际关系变得越来越重要。在商业、社

2023-06-27 09:35:52

中国轻纺城:6月27日针织经编布报价

​中国轻纺城6月27日:针织经编布报价布  料  名  称幅宽cm克重 成

2023-06-27 09:25:35

小米王化:小米汽车14.99万起售为假消息|全球热头条

​小米王化:小米汽车14 99万起售为假消息:小米公关负责人王化在其微博

2023-06-27 09:04:05

我省北斗综合应用示范推广再获阶段性成果 世界速读

​□记者付玉婷报道本报济南讯山东聚焦北斗规模化应用和北斗产业健康快速

2023-06-27 07:57:38

今日热讯:神佑释放牧师如何打副本

​游戏中有各种各样的策略你需要知道。只有知道了策略,才能快速取得游戏

2023-06-27 06:46:15

孕早期孕妇会怕冷吗_孕妇会怕冷吗

​1、病情分析:怀孕初期,孕妇的基础体温会偏高,此外可能身体虚弱,抵

2023-06-27 05:44:25

档案袋规格型号4个尺寸代表(档案袋规格)-世界今热点

​案袋规格型号4个尺寸代表,档案袋规格这个问题很多朋友还不知道,来为

2023-06-27 03:56:17

一隅方寸亦有天地(一隅)

​来为大家解答以下的问题,隅方寸亦有天地,一隅这个很多人还不知道,现

2023-06-27 01:46:55

炎亚纶事件再度升级,曝邱耀乐已亲自报警,警方将传唤炎亚纶到案调查 全球微动态

​“MeToo事件”一直延烧到现在,台湾省娱乐圈也因为此事迎来大动荡,数

2023-06-26 23:17:49

【全球聚看点】掌上《南安新闻》2023年6月26日

​★2023年6月26日 ★南安新闻南安新闻全市安全防范工作紧急视频会议召

2023-06-26 22:19:12

建设银行与河北省签署合作协议 涉产业发展、雄安新区建设等方面 每日消息

​下一步,希望建行在产业发展、雄安新区建设、金融科技等方面,持续深化

2023-06-26 21:33:46

环球微头条丨灌区渠道内提前蓄水保障农田用水 保证粮食安全

​消息:近日,辽宁省出现连续高温晴热天气,多地发布了高温橙色预警,农

2023-06-26 21:00:38

快速长头发一天长2厘米_快速长头发

​多喝水。水可以帮助身体排毒,促进新陈代谢。每天喝200毫升的水,不仅

2023-06-26 20:08:41

当前热议!合肥警方禁毒宣传走进中科大_每日信息

​记者从合肥警方获悉,在第36个国际禁毒日来临之际,合肥市公安局特警支

2023-06-26 19:54:24

2023郑州大学生免费坐地铁审核需要多久|全球短讯

​2023郑州大学生免费坐地铁审核需要多久?商易行APP线上注册申请自2023

2023-06-26 18:38:50

卢布对美元汇率自2022年3月29日以来首次突破87比1_当前报道

​视觉中国资料图新华社快讯:俄罗斯莫斯科交易所6月26日开盘后,。编辑

2023-06-26 18:10:08

【全球快播报】同道猎聘6月26日斥资117.49万港元回购13.1万股

​同道猎聘(06100)发布公告,于2023年6月26日该公司斥资117 49万港元回

2023-06-26 17:35:39

黑龙江省人民政府人事任免_世界热闻

​黑龙江省人民政府关于蒋建国等任免职的通知

2023-06-26 17:09:01

无“银”时代开启 光伏铜电镀技术加速落地

​无“银”时代开启光伏铜电镀技术加速落地光伏技术迭代不断,降本增效从

2023-06-26 16:59:57

当前热门:忍者最新兑换码 水果忍者兑换码

​1、好像是,不是很确定,已经忘记了关注微信水果忍者。2、发送萌宠贺新

2023-06-26 16:08:08

当前聚焦:端午出行数据环比走弱!君亭酒店大跌7%,中国中免、曲江文旅跟跌

​6月26日,旅游酒店板块低开低走震荡下挫,Choice数据显示,旅游酒店指

2023-06-26 15:54:06

观点:国家电网图案(国家电网图标颜色rgb)

​1、颜色cmyk值是:C-100M-5Y-50K-40。本文到此分享完毕,希望对大家有所帮助。

2023-06-26 15:13:53