国产系统下开发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语言操作数据库 定义了一套操作所有关系型数据库的规则(接口) 本质:其实是官方公司定义了一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
