国产系统下开发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 数据清洗三要素: 库表拷贝和数据备份数据清洗SQL数据清洗必杀技-存储过程 前提:数据库关联库表初始化和基础数据初始化: -- usc.t_project definitionCREATE TABLE t_project (id varchar(64) NOT NULL COMMENT 主键,tid varchar(…...
设计模式第九讲:常见重构技巧 - 去除不必要的!=
设计模式第九讲:常见重构技巧 - 去除不必要的! 项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?本文是设计模式第九讲,讲解常见重构技巧:去除不必要的! 文章目录…...
自动化安装系统问题记录
Cobbler 版本更新 https://github.com/cobbler/cobbler/releases Centos7/8 Cobbler 问题: 部署cobbler时,使用cobbler get-loaders从网络下载引导加载程序时提示命令未找到 解决: yum -y install syslinux Rockylinux9.2 Cobbler3.…...
centos7 docker安装记录
以下所有命令都在root用户下进行,若为普通用户,需要在所有命令前加上 sudo。 1、更新yum包 将yum包更新到最新 yum update2、安装需要的软件包 yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的; yum …...
全网实时热点热榜事件API
全网热榜API 一、全网热榜二、使用步骤1、接口2、请求参数 三、 案例和demo 一、全网热榜 1个免费的帮助你获取全网热点事件的接口API 二、使用步骤 1、接口 重要提示:建议使用https协议,当https协议无法使用时再尝试使用http协议 请求方式: GET https://luckycola.com.cn…...
淘宝API接口:提高电商运营效率与用户体验的利器(淘宝API接口使用指南)
淘宝API接口:提高电商运营效率与用户体验的利器 随着电商行业的快速发展,淘宝作为国内最大的电商平台之一,不断探索和创新,以满足不断变化的用户需求和商家需求。其中,淘宝API接口便是其创新的一个重要方面。本文将深…...
智己 LS6 用实力和你卷,最强 800v ?
2023 成都车展期间,智己 LS6 正式公布预售价格,新车预售价为 23-30 万元。新车会在 10 月份进行上市,11 月正式交付。 此前我们对智己 LS6 做过非常详细的静态体验,感兴趣的可点击此链接了解。 造型方面,新车前脸相比…...
深入探索C语言自定义类型:打造你的编程世界
一、什么是自定义类型 C语言提供了丰富的内置类型,常见的有int, char, float, double, 以及各种指针。 除此之外,我们还能自己创建一些类型,这些类型称为自定义类型,如数组,结构体,枚举类型和联合体类型。 …...
Opencv基于文字检测去图片水印
做了一个简单的去水印功能,基于文字检测去图片水印。效果如下: 插件功能代码参考如下: using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…...
jdbc235
概念:java database connectivity java数据库连接 java语言操作数据库 定义了一套操作所有关系型数据库的规则(接口) 本质:其实是官方公司定义了一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接…...
帮孩子建立时间观念:从认识“十分钟有多长”开始
很多家长都遇到过这样的困扰:让孩子“再玩十分钟就吃饭”,结果十分钟后他完全没反应,不是故意拖延,而是他真的不知道十分钟有多长。时间对孩子来说是抽象的,看不见摸不着。要帮孩子建立时间观念,不妨从感受…...
从F103RBT6到ZET6:手把手教你搞定不同容量STM32的电源与特殊引脚设计
从F103RBT6到ZET6:STM32电源设计与特殊引脚避坑指南 在嵌入式硬件设计中,STM32F103系列因其出色的性价比和丰富的资源成为工程师的首选。但不同容量型号间的细微差异往往成为项目中的"隐形杀手"。本文将深入剖析中容量RBT6与大容量ZET6在电源架…...
鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储
一、前言 心晴驿站已正式稳定上架华为应用市场,所有专栏内容均基于线上真实版本复盘产出,所有逻辑、代码、优化方案均通过真机测试、性能校验、隐私合规审核,具备完整落地与参赛复用价值。 在前八篇专栏中,我们完成了项目整体架构…...
彻底告别iPhone过热降频!thermalmonitordDisabler让你的设备性能满血释放
彻底告别iPhone过热降频!thermalmonitordDisabler让你的设备性能满血释放 【免费下载链接】thermalmonitordDisabler A tool used to disable iOS daemons. 项目地址: https://gitcode.com/gh_mirrors/th/thermalmonitordDisabler 你是否曾经在游戏激战中突然…...
UnityPackage Extractor终极指南:快速提取Unity资源包的免费工具
UnityPackage Extractor终极指南:快速提取Unity资源包的免费工具 【免费下载链接】unitypackage_extractor Extract a .unitypackage, with or without Python 项目地址: https://gitcode.com/gh_mirrors/un/unitypackage_extractor 在Unity开发工作流中&…...
数据保护双引擎:深入解析HyperSnap与HyperCDP的核心原理与选型指南
1. 数据保护的基石:为什么需要HyperSnap和HyperCDP? 想象一下你正在编辑一份重要文档,突然电脑蓝屏了。如果没保存,几小时的工作可能付诸东流——这就是数据保护要解决的核心问题。在企业级存储中,HyperSnap快照和Hype…...
为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量 当企业计划为内部管理系统、数据分析工具等引入大模型能力时࿰…...
买服装模板机选中捷、川田、杰克还是慧拿?紧凑型流水线升级,空间与适配才是核心决策
在服装智能制造全面普及的今天,线上模板机已经成为服装企业改造紧凑流水线、实现降本增效的核心装备。当前市场上,中捷、川田、杰克、慧拿四大品牌稳居全球服装自动化设备第一梯队,技术实力、产品品质、品牌口碑均处于行业头部水平。面对 “选…...
从ChatGLM2到LLaMA2:大厂如何用GQA和MQA在推理速度与模型质量间做取舍?
大模型注意力机制实战:GQA与MQA如何重塑推理效率与生成质量的平衡 当ChatGLM2-6B在推理速度上展现出惊人优势时,技术团队发现其生成质量偶尔会出现波动;而LLaMA2虽然保持了稳定的输出品质,却在资源消耗上让不少企业望而却步。这背…...
Redis分布式锁进阶第六十一篇
一、本篇前置衔接 第九十二篇我们完成Redisson源码拆解、手写复刻、底层内核穿透,彻底明白分布式锁代码层、脚本层、线程层原理。到此为止,代码、源码、坑点、运维、监控、面试全部讲透。但很多开发最大的困惑依旧存在:不同体量公司为什么锁架…...
