飞腾架构麒麟V10桌面系统Qt应用程序打包

news2024/12/24 5:56:48

目录

      • 前言
      • 1. linuxdeployqt
        • 1.1 编译安装 linuxdeployqt
        • 1.2 编译安装 patchelf
        • 1.3 可选安装 appimagetool
      • 2.设置环境变量
      • 3. 打包
      • 4.测试
      • 5.添加启动图标
        • 5.1 设置桌面图标和开始菜单图标
        • 5.2设置任务栏图标
      • 6.总结

前言

本文记录了在飞腾架构麒麟V10桌面系统中打包Qt应用程序及部署的一些注意事项。打包工具使用的是linuxdeployqt,在飞腾架构架构下没有现成的工具安装包,需要自行编译安装。

1. linuxdeployqt

首先下载linuxqtdeploy下载地址https://github.com/probonopd/linuxdeployqt

在这里插入图片描述
下载之后解压目录如上图所示,在编译之前需要修改一个地方,如下图所示红色框中的if(strvercmp(glcv, "2.32") >= 0)改为if(strvercmp(glcv, "20") >= 0),其中glcv的定义为 const char *glcv = gnu_get_libc_version (); 表示libc的版本号, 麒麟V10上自带的glibc版本远大于2.32而小于20,所以这里改为20 就不会报错了。
在这里插入图片描述

1.1 编译安装 linuxdeployqt

编译linuxdeployqt需要参考根目录下的BUILDING.md文档,打开该文档,按照提示来编译,下面是需要执行的一些命令:

sudo apt-get -y install git g++ libgl1-mesa-dev
#将qt5的bin目录添加到环境变量
export PATH=/opt/qt5/bin:$PATH
cd linuxdeployqt
qmake
make

不出意外的话,编译很快结束,这时已经生成了linuxqtdeploy 可执行程序,如果想要安装到qt5的bin目录下的话则执行下面的安装命令:

sudo make install

1.2 编译安装 patchelf

下载源码及编译安装命令如下:

wget https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.bz2
tar xf patchelf-0.9.tar.bz2
( cd patchelf-0.9/ && ./configure  && make && sudo make install )

1.3 可选安装 appimagetool

如果想要生成AppImages,下载系统对应版本的 appimagetool 并添加到系统环境变量$PATH中, 例如安装到/usr/local/bin 目录下,确保下载的文件重命名为 appimagetool 并添加了可执行权限,chmod a+x。下载及安装命令如下:

sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool
sudo chmod a+x /usr/local/bin/appimagetool

至此打包工具安装完成,接下来尝试打包Qt程序。

2.设置环境变量

用linuxdeployqt 打包的过程中,会自动将程序依赖的库文件拷贝到指定目录中去,前提是这些库能被工具访问到。qt程序依赖的库和插件基本上在qt的安装目录下,如果程序还依赖其他的库,如自己编译的动态库、数据库驱动等,都要将其所在的目录添加到环境变量中。下面是一个配置环境变量的示例:

#linuxdeployqt安装在/opt/qt5/bin目录下,确保在终端可以执行该程序
export PATH=/opt/qt5/bin:$PATH 
#需要打包的qt程序依赖的库目录,bin目录下有程序依赖的其他so库
export LD_LIBRARY_PATH=/home/demo/bin:$LD_LIBRARY_PATH
#需要打包的qt程序依赖的qt库目录
export LIB_PATH=/opt/qt5/lib:$LIB_PATH
#需要打包的qt程序依赖的qt插件目录
export PLUGIN_PATH=/opt/qt5/plugins:$PLUGIN_PATH

接下来正式打包qt程序。

3. 打包

将编译好的qt应用程序demo拷贝到一个空目录package下。在上面设置好环境变量的终端内切换目录到package下,执行打包命令:

linuxdeployqt demo -appimage

根据程序依赖库的多少,打包时间会有很大差异,打包过程会在package根目录下创建一些目录,结构如下:
在这里插入图片描述

如果在打包过程中程序依赖的某个库文件找不到,打包进程将终止并将缺少的库信息输出到终端,根据提示在系统中找到依赖的库拷贝到对应的环境变量所在的目录下后,再次执行打包命令,直到打包完成,不报错。这里有个小技巧,如果缺少的是qt插件,可以尝试在麒麟V10系统自带的qt安装目录下拷贝到你的qt环境中,前提是qt大版本相同。
打包完成后,需要将程序运行所需的一些配置文件、样式表、sqlite数据库文件等拷贝到package目录下。

4.测试

打包完成后需要测试程序是否能独立运行,重新打开一个终端,在新终端里用命令运行demo程序,看程序能否正常启动,若能正常启动,则说明打包成功,若启动失败则根据错误提示解决问题。

5.添加启动图标

5.1 设置桌面图标和开始菜单图标

在打包的根目录下会生成名为default.png 和 default.desktop两个文件,其中default.png 就代表应用程序图标,需要替换成你的应用程序图标即可。default.desktop文件的内容如下:

[Desktop Entry]
Type=Application                    
Name=XXXX系统
Exec=/home/demo/ZODA
Icon=/home/demo/zoda.png
Comment=XXX系统
Terminal=true

这里需要关注的是Exec 和 Icon这两个字段,其中Exec为应用程序所在的绝对路径,Icon为应用程序所在的绝对路径。将default.desktop重命名为应用程序的名字如zoda.desktop,如果Exec和 Icon这两个值设置正确,zoda.desktop文件的图标会变成应用程序图标的样子。修改zoda.desktop的权限,添加可执行权限chmod +x,然后拷贝到桌面,就可以在桌面双击图标打开应用程序。将 zoda.desktop 拷贝到/usr/share/applications/ 目录下即可在开始菜单中看到你的应用程序的图标。

5.2设置任务栏图标

qt应用程序的任务栏图标要在程序中设置,首先将png格式的图标转为ico格式,并添加在资源文件中,然后在程序的主窗口中设置图标

MainWindow w;
w.setWindowIcon(QIcon(":/zoda.ico"));

重新编译运行程序即可在任务栏中看到应用程序的图标。

6.总结

以上就是本文的所有内容了,文中的打包部署步骤都是笔者亲自动手实践后的记录,真实有效。如对文中内容有疑问,欢迎留言讨论!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端需要理解的CSS知识

CSS(层叠样式表,Cascading Style Sheets)不是编程语言,而是用来描述 HTML 或 XML(包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言)文档的表现与展示效果的样式表语言。CSS3是CSS的最新标准,是…

深度学习基础知识-pytorch数据基本操作

1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构,例如 0维:叫标量,代表一个类别,如1.0 1维:代表一个特征向量。如 [1.0,2,7,3.4] 2维:就是矩…

Spring源码深度解析三 (MVC)

书接上回 10.MVC 流程&源码剖析 * 问题1:Spring和SpringMVC整合使用时,会创建一个容器还是两个容器(父子容器?) * 问题2:DispatcherServlet初始化过程中做了什么? * 问题3:请求…

laravel aws s3

由于公司有境外项目,服务器、文件存储都是用的亚马逊,真真地是没有用过,在此记录一下自己的s3研究结果 Laravel - aws - s3 第一步创建用户,生成秘钥: 第二步创建存储桶: 1、创建存储桶时,以下…

kafka--技术文档-基本概念-《快速了解kafka》

学习一种新的消息中间键,卡夫卡!!! 官网网址 Apache Kafka 基本概念 Kafka是一种开源的分布式流处理平台,由Apache软件基金会开发,用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统&#xf…

elelementui组件

一、按钮 1、按钮样式 使用type、plain、round和circle属性来定义 Button 的样式。 2、主要代码 <el-row><el-button>默认按钮</el-button><el-button type"primary">主要按钮</el-button><el-button type"success">…

【巧学C++之西游篇】No.2 --- C++闹天宫,带着“重载“和“引用“

文章目录 前言&#x1f31f;一、函数重载&#x1f30f;1.1.函数重载概念&#x1f30f;1.2.C支持函数重载的原理 -- 名字修饰 &#x1f31f;二、引用&#x1f30f;2.1.引用的概念&#x1f30f;2.2.引用特性&#x1f30f;2.3.常引用&#x1f30f;2.4.使用场景&#x1f30f;2.5.传…

Web 自动化神器 TestCafe—页面高级操作篇

♥ 前 言 在【Web 自动化神器 TestCafe — 页面基本操作篇】这篇文章中我们介绍了TestCafe页面交互的一些基本使用 Web 自动化神器 TestCafe — 页面基本操作篇 这篇文章接着上一篇来给大家介绍一下 TestCafe 页面交互的一些高级操作。 一、鼠标拖拽 鼠标拖拽鼠标拖拽 …

食品制造行业云MES系统解决方案

食品饮料行业大致可以分为初级产品加工、二次加工、食品制造、食品分装、调味品和饲料加工等几大类。由于处于产业链不同的位置&#xff0c;其管理存在一定的差异&#xff0c;那么食品行业的MES应该怎么建设呢&#xff1f; 食品饮料行业生产管理特点&#xff1a; 食品饮料行业…

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数&#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如&#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…

NLP与大模型主题全国师资培训班落地,飞桨持续赋能AI人才培养

为了推动大模型及人工智能相关专业人员的培养&#xff0c;8月11日-8月13日&#xff0c;由中国计算机学会主办、机械工业出版社、北京航空航天大学、百度飞桨联合承办 “CCF群星计划之文心高校行- NLP与大模型”主题师资培训班&#xff08;以下简称培训班&#xff09;在北京天信…

react antd常见报错Each child in a list should have a unique “key“ prop

常见的一个报错内容&#xff1a;原因可能真的很奇怪&#xff0c;但是那就那么三四种情况&#xff0c;在此记录一下这个问题 console.js:213 Warning: Each child in a list should have a unique "key" prop. Check the render method of Panel. It was passed a chi…

4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌

随着工业互联网的发展,4G工业路由器得到越来越广泛的应用。但是如何根据实际需求选择合适的4G工业路由器,是许多用户关心的问题。为此,本文将深入剖析4G工业路由器的工作原理、重要参数及选型要点,并推荐优质的品牌及产品,以提供选型参考。 一、4G工业路由器的工作原理 4G工业…

gitee远程仓库——Git常用远程仓库托管服务

远程仓库 我们的代码不能总是放在本地&#xff0c;因为总是放在本地&#xff0c;一旦电脑出现故障&#xff0c;数据将丢失&#xff0c;怎么共享呢&#xff1f;这里我们需要一个服务器&#xff0c;我们可以把代码放到服务器上&#xff0c;然后让别人下载&#xff0c;这样我们既…

动力节点Java项目的开发原则与核心业务介绍

文章目录 一 项目开发原则 1.1 web开发项目的步骤&#xff1a; 1.2 crm的技术架构&#xff1a;客户关系管理技术框架 1.3 开发目的 1.4 软件公司的组织结构 1.5 软件开发的生命周期 1&#xff09;招标 2&#xff09;可行性分析 3&#xff09;需求分析 4&#xff09;…

Dockerfile文件详细

Dockerfile 是一个文本文件&#xff0c;里面包含组装新镜像时用到的基础镜像和各种指令&#xff0c;使用dockerfile 文件来定义镜像&#xff0c;然后运行镜像&#xff0c;启动容器。 dockerfile文件的组成部分 一个dockerfile文件包含以下部分&#xff1a; 基础镜像信息&…

python爬虫-网页数据提取

import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…

基于大语言模型知识问答应用落地实践 – 知识库构建(上)

01 背景介绍 随着大语言模型效果明显提升&#xff0c;其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型&#xff08;LLM&#xff09;知识召回&#xff08;Knowledge Retrieval&#xff09;的方式&#xff0c;在私域知识问答方面可以…

HTTP协议(JavaEE初阶系列15)

目录 前言&#xff1a; 1.HTTP协议 1.1HTTP协议是什么 1.2HTTP协议的报文格式 1.2.1抓包工具的使用 1.2.2HTTP请求 1.2.3HTTP响应 2.HTTP请求 2.1首行的组成 2.2.1URL的组成 2.2认识“方法”&#xff08;method&#xff09; 2.2.1GET方法 2.2.2POST方法 2.2.3GET…

【AIGC】单图换脸离线版软件包及使用方法

云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。 Roop作为一个新出的开源项目&#xff0c;配置起来还是有一定难度的。 我已经把各种依赖&#xff0c;模型&#xff0c;环境配置已经…