当前位置: 首页 > news >正文

国产系统下开发QT程序总结

国产系统下开发QT程序总结

1. 国产系统简介

开发国产系统客户端的过程中,会出现兼容性问题。以下介绍Kylin和UOS环境下开发QT程序,
首先麒麟和统信这两个系统基于Ubuntu开发的。所以在Ubuntu开发理论上在国产系统上也能运行。芯片架构又分为amd,arm,mips架构,三个芯片架构不能互通,但是同样架构芯片的Ubuntu开发程序理论上在国产系统上也是兼容的(验证了Kylin和UOS的程序在Ubuntu是可以运行的)。

2. 工具安装

2.1 QT

桌面Linux一般自带QT库,但发布就不用用自带的QT发布,因为一些库不全。
如果只是个人开发,下载qt-creator即可,但是要发布,QT依赖库不缺失,就必须安装一个新的qt编译器。
amd架构
以5.12.12为例,下载链接如下
https://download.qt.io/archive/qt/5.12/5.12.12/qt-opensource-linux-x64-5.12.12.run
在这里插入图片描述
在这里插入图片描述

gcc和Creator必须要选,这样amd架构下qt和qmake就安装好了。
注意官网提供的安装包是amd架构的,arm架构的电脑是识别不了的。
arm架构
这时候就需要编译源码了,下载位置为
在这里插入图片描述
single目录下面的为对应版本的源码,编译QT源码的博客可以参考其他博客
编译过程中要sudo管理员权限否则可能编译不通过
QtCreator只需要下载默认版本即可
sudo apt install qt-default
QtCreator只是一个IDE,安装QtCreator在国产系统会找到,不要用系统自带的QT,这样打包出的安装包如果在另一台系统QT版本不一样或者没有QT的电脑就运行不了。

2.2 打包工具

这里有一个坑,就是网上的博客有的做法是将依赖库通过脚本拷贝到运行程序下,这种做法是不可靠的,因为QT程序运行时不止去找直接依赖的库,还会加载QT平台,实际上找的还是系统自带的QT。如果系统QT版本不一样,或者没有QT就运行不起来了。
解决方案是用qt工具打包linuxdeployqt,下载地址https://github.com/probonopd/linuxdeployqt
这篇博客介绍的很详细
https://blog.csdn.net/weixin_40293570/article/details/111627158
注意事项:
在编译linuxdeployqt工具时,当前qt选择的版本是编译程序的qt版本
qmake -v即可查看当前qt的版本

qmake -v
cd linuxdeployqt
qmake
make
sudo make install
sudo mv bin/linuxdeployqt /usr/local/bin/

确保linuxdeployqt和你程序的qt版本一样,很重要
在打包之前还需要在系统环境中配置你编译程序的QT位置

vim .bashrc
export PATH=/home/用户名/5.9.6/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/用户名/5.9.6/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/用户名/5.9.6/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/用户名/5.9.6/gcc_64/qml:$QML2_IMPORT_PATH
source ~/.bashrc

环境配置好后就可以用工具打包了

linuxdeployqt demo -verbose2

这里因为我安装包是单独打包的,用这个工具主要是解决QT依赖的问题。linuxdeployqt 应该也可以完整打包的在这里插入图片描述
打包后结构如上,字体没有加载的时候,会提示lib没有fonts加上即可
在这里插入图片描述
这时候配置文件qt.conf会指定qt的位置
这个工具会解决QT依赖的问题。
但是除QT的依赖问题还需要自己解决。

3. 依赖问题

3.1 C++版本过高

C++过高会出现libc.so和libstdc++.so没有对应得到C版本,解决办法是用低版本编译。

3.2 依赖库缺失

3.2.1 依赖库直接依赖缺失

在这里插入图片描述
解决方法是在.pro文件时指定搜索路径为指定位置。这样运行程序会优先搜索指定路径下是否有对应的库。

3.2.2 依赖库间接依赖缺失

在这里插入图片描述
比如libfreetype为运行程序依赖的库,这个可以在编译链接时指定位置,但是libfreetype本身依赖的库缺失,这时候就找不到依赖的库,但是程序还是可以运行的,可以用的这个库的时候才会出问题,运行程序直接依赖的库缺失会直接运行不起来的。
这时候就需要编译freetype的源码,并且在搜索依赖库的时候指定搜索路径

./configure --prefix=/usr/local LDFLAGS=-Wl,-rpath=.

其中–prefix是指定安装位置 ,LDFLAGS=-Wl,-rpath=.是自定义依赖库搜索路径
这里用的是相对路径
在这里插入图片描述
make -j 8
make install
编译并安装

在这里插入图片描述
在这里插入图片描述
这时候查看libfreetype.so的依赖库发现还是指向系统但是单独拿出libfreetype.so,并把libfreetype.so依赖库放在同层目录就会发现指向当前目录下
在这里插入图片描述
在这里插入图片描述
替换原来的libfreetype并建立软链接,取代之前的freetype.so库,依赖库指向当前目录、

在这里插入图片描述
程序可以正常运行,并且这台电脑没有qt环境,其他类似的问题也可以通过这种方式解决

相关文章:

国产系统下开发QT程序总结

国产系统下开发QT程序总结 1. 国产系统简介 开发国产系统客户端的过程中,会出现兼容性问题。以下介绍Kylin和UOS环境下开发QT程序, 首先麒麟和统信这两个系统基于Ubuntu开发的。所以在Ubuntu开发理论上在国产系统上也能运行。芯片架构又分为amd,arm,mi…...

【Redis】redis入门+java操作redis

目录 一、Redis入门 1.1 Redis简介 1.2 Redis下载与安装 1.2.1 下载 1.2.2 linux安装 1.2.3 windows安装 1.3 Redis服务启动与停止 1.3.1 linux启动、停止Redis服务 1.3.2 windows启动、停止Redis服务 1.4 修改Redis启动密码 1.4.1 Linux修改设置 1.4.2 windows设…...

无涯教程-Android - Spinner函数

Spinner允许您从下拉菜单中选择一个项目 例如。使用Gmail应用程序时,将显示如下所示的下拉菜单,您需要从下拉菜单中选择一个项目。 Spinner Example 示例 本示例演示计算机的类别,您需要从类别中选择一个类别。 以下是修改后的主要Activity文件src/com.example.spinner/Andr…...

国标GB28181视频平台EasyGBS国标平台智能边缘计算网关关于小区电动车进电梯的应用方案设计

一、行业背景 随着人工智能技术的不断成熟与落地,各行各业也逐渐融入AI智能检测技术,尤其是在视频监控领域,通过AI视频智能检测与分析,可以大大提高视频的自动化、智能化监控能力。比如在小区的管理中,由电动车上楼入…...

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境,原本上面已有A测试环境,固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注:本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public,并且不能删除&a…...

如何解决 Out Of Memory 的问题

背景 在用 Excel Importer 导入数据,当数据量超过 1w 行,经常会出现 OutOfMemory 的错误。(用 Excel Exporter 导出数据时,也会有类似问题)。 通常的表现症状如下,即在导入成功若干行之后,爆出…...

代码随想录训练营二刷第九天 | 字符串结束

总结 总体来说字符串的题目除了KMP之外难度不大,但是细节不少,有翻转的有双指针操作的。 此外一般使用双指针都是为了降低时间复杂度,从On2到On,链表除外。...

javaee spring jdbcTemplate的使用

依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…...

qt day

#include "widget.h" #include "ui_widget.h" void Widget::my_slot() {} Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowIcon(QIcon(":/wodepeizhenshi.png"));//設置窗口的…...

Configurable Weather Parameters

1. Weather Parameters 2. Classification ClearNoon, CloudyNoon, WetNoon, WetCloudyNoon, SoftRainNoon, MidRainyNoon, HardRainNoon, ClearSunset, CloudySunset, WetSunset, WetCloudySunset, SoftRainSunset, MidRainSunset, HardRainSunset to do list: 可以关注一下…...

MySQL 8 数据清洗总结

MySQL 8 数据清洗三要素&#xff1a; 库表拷贝和数据备份数据清洗SQL数据清洗必杀技-存储过程 前提&#xff1a;数据库关联库表初始化和基础数据初始化&#xff1a; -- usc.t_project definitionCREATE TABLE t_project (id varchar(64) NOT NULL COMMENT 主键,tid varchar(…...

设计模式第九讲:常见重构技巧 - 去除不必要的!=

设计模式第九讲&#xff1a;常见重构技巧 - 去除不必要的! 项目中会存在大量判空代码&#xff0c;多么丑陋繁冗&#xff01;如何避免这种情况&#xff1f;我们是否滥用了判空呢&#xff1f;本文是设计模式第九讲&#xff0c;讲解常见重构技巧&#xff1a;去除不必要的! 文章目录…...

自动化安装系统问题记录

Cobbler 版本更新 https://github.com/cobbler/cobbler/releases Centos7/8 Cobbler 问题&#xff1a; 部署cobbler时&#xff0c;使用cobbler get-loaders从网络下载引导加载程序时提示命令未找到 解决&#xff1a; yum -y install syslinux Rockylinux9.2 Cobbler3.…...

centos7 docker安装记录

以下所有命令都在root用户下进行&#xff0c;若为普通用户&#xff0c;需要在所有命令前加上 sudo。 1、更新yum包 将yum包更新到最新 yum update2、安装需要的软件包 yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的&#xff1b; yum …...

全网实时热点热榜事件API

全网热榜API 一、全网热榜二、使用步骤1、接口2、请求参数 三、 案例和demo 一、全网热榜 1个免费的帮助你获取全网热点事件的接口API 二、使用步骤 1、接口 重要提示:建议使用https协议,当https协议无法使用时再尝试使用http协议 请求方式: GET https://luckycola.com.cn…...

淘宝API接口:提高电商运营效率与用户体验的利器(淘宝API接口使用指南)

淘宝API接口&#xff1a;提高电商运营效率与用户体验的利器 随着电商行业的快速发展&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;不断探索和创新&#xff0c;以满足不断变化的用户需求和商家需求。其中&#xff0c;淘宝API接口便是其创新的一个重要方面。本文将深…...

智己 LS6 用实力和你卷,最强 800v ?

2023 成都车展期间&#xff0c;智己 LS6 正式公布预售价格&#xff0c;新车预售价为 23-30 万元。新车会在 10 月份进行上市&#xff0c;11 月正式交付。 此前我们对智己 LS6 做过非常详细的静态体验&#xff0c;感兴趣的可点击此链接了解。 造型方面&#xff0c;新车前脸相比…...

深入探索C语言自定义类型:打造你的编程世界

一、什么是自定义类型 C语言提供了丰富的内置类型&#xff0c;常见的有int, char, float, double, 以及各种指针。 除此之外&#xff0c;我们还能自己创建一些类型&#xff0c;这些类型称为自定义类型&#xff0c;如数组&#xff0c;结构体&#xff0c;枚举类型和联合体类型。 …...

Opencv基于文字检测去图片水印

做了一个简单的去水印功能&#xff0c;基于文字检测去图片水印。效果如下&#xff1a; 插件功能代码参考如下&#xff1a; using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…...

jdbc235

概念&#xff1a;java database connectivity java数据库连接 java语言操作数据库 定义了一套操作所有关系型数据库的规则&#xff08;接口&#xff09; 本质&#xff1a;其实是官方公司定义了一套操作所有关系型数据库的规则&#xff0c;即接口。各个数据库厂商去实现这套接…...

帮孩子建立时间观念:从认识“十分钟有多长”开始

很多家长都遇到过这样的困扰&#xff1a;让孩子“再玩十分钟就吃饭”&#xff0c;结果十分钟后他完全没反应&#xff0c;不是故意拖延&#xff0c;而是他真的不知道十分钟有多长。时间对孩子来说是抽象的&#xff0c;看不见摸不着。要帮孩子建立时间观念&#xff0c;不妨从感受…...

从F103RBT6到ZET6:手把手教你搞定不同容量STM32的电源与特殊引脚设计

从F103RBT6到ZET6&#xff1a;STM32电源设计与特殊引脚避坑指南 在嵌入式硬件设计中&#xff0c;STM32F103系列因其出色的性价比和丰富的资源成为工程师的首选。但不同容量型号间的细微差异往往成为项目中的"隐形杀手"。本文将深入剖析中容量RBT6与大容量ZET6在电源架…...

鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储

一、前言 心晴驿站已正式稳定上架华为应用市场&#xff0c;所有专栏内容均基于线上真实版本复盘产出&#xff0c;所有逻辑、代码、优化方案均通过真机测试、性能校验、隐私合规审核&#xff0c;具备完整落地与参赛复用价值。 在前八篇专栏中&#xff0c;我们完成了项目整体架构…...

彻底告别iPhone过热降频!thermalmonitordDisabler让你的设备性能满血释放

彻底告别iPhone过热降频&#xff01;thermalmonitordDisabler让你的设备性能满血释放 【免费下载链接】thermalmonitordDisabler A tool used to disable iOS daemons. 项目地址: https://gitcode.com/gh_mirrors/th/thermalmonitordDisabler 你是否曾经在游戏激战中突然…...

UnityPackage Extractor终极指南:快速提取Unity资源包的免费工具

UnityPackage Extractor终极指南&#xff1a;快速提取Unity资源包的免费工具 【免费下载链接】unitypackage_extractor Extract a .unitypackage, with or without Python 项目地址: https://gitcode.com/gh_mirrors/un/unitypackage_extractor 在Unity开发工作流中&…...

数据保护双引擎:深入解析HyperSnap与HyperCDP的核心原理与选型指南

1. 数据保护的基石&#xff1a;为什么需要HyperSnap和HyperCDP&#xff1f; 想象一下你正在编辑一份重要文档&#xff0c;突然电脑蓝屏了。如果没保存&#xff0c;几小时的工作可能付诸东流——这就是数据保护要解决的核心问题。在企业级存储中&#xff0c;HyperSnap快照和Hype…...

为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量 当企业计划为内部管理系统、数据分析工具等引入大模型能力时&#xff0…...

买服装模板机选中捷、川田、杰克还是慧拿?紧凑型流水线升级,空间与适配才是核心决策

在服装智能制造全面普及的今天&#xff0c;线上模板机已经成为服装企业改造紧凑流水线、实现降本增效的核心装备。当前市场上&#xff0c;中捷、川田、杰克、慧拿四大品牌稳居全球服装自动化设备第一梯队&#xff0c;技术实力、产品品质、品牌口碑均处于行业头部水平。面对 “选…...

从ChatGLM2到LLaMA2:大厂如何用GQA和MQA在推理速度与模型质量间做取舍?

大模型注意力机制实战&#xff1a;GQA与MQA如何重塑推理效率与生成质量的平衡 当ChatGLM2-6B在推理速度上展现出惊人优势时&#xff0c;技术团队发现其生成质量偶尔会出现波动&#xff1b;而LLaMA2虽然保持了稳定的输出品质&#xff0c;却在资源消耗上让不少企业望而却步。这背…...

Redis分布式锁进阶第六十一篇

一、本篇前置衔接 第九十二篇我们完成Redisson源码拆解、手写复刻、底层内核穿透&#xff0c;彻底明白分布式锁代码层、脚本层、线程层原理。到此为止&#xff0c;代码、源码、坑点、运维、监控、面试全部讲透。但很多开发最大的困惑依旧存在&#xff1a;不同体量公司为什么锁架…...