国产系统下开发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环境,其他类似的问题也可以通过这种方式解决

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

持续性能优化:确保应用保持高性能

在当今数字化时代,应用程序的性能已经成为用户体验和业务成功的关键因素之一。无论是Web应用、移动应用还是企业级软件,用户对于速度和响应性的要求越来越高。因此,持续性能优化已经成为保证应用在竞争激烈的市场中脱颖而出的重要策略。 什么…

【CSS】解决对齐的小问题

问题: 表单或者页面上可能遇到文字无法对平均分,带有冒号的文本无法左右对齐的情况 常见的解决方式: 解决如下图 仍无法解决对齐的问题,还需要考虑字数 解决 这里用css的方式解决 增加 i 标签 固定宽度,设置 i …

Python股票交易---均值回归

免责声明:本文提供的信息仅用于教育目的,不应被视为专业投资建议。在做出投资决策时进行自己的研究并谨慎行事非常重要。投资涉及风险,您做出的任何投资决定完全由您自己负责。 在本文中,您将了解什么是均值回归交易算法&#xff…

Leetcode每日一题:1448. 统计二叉树中好节点的数目

原题 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 输入:root [3,1,4,3,null,1,5] 输出:4 解…

微服务(rpc)

微服务(rpc) 微服务必备的模块生产者消费者管理平台流量控制集群情况下如何做到流量监控 负载均衡服务发现和治理序列化传输序列化和反序列化 微服务是一种架构风格,将一个应用程序拆分为一组小型、独立的服务,每个服务都可以独立…

Elasticsearch 集成---框架集成SpringData-集成测试-索引操作

1.Spring Data 框架介绍 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA &a…

GraphQL渗透测试案例及防御办法

什么是GraphQL GraphQL 是一种 API 查询语言,旨在促进客户端和服务器之间的高效通信。它使用户能够准确指定他们在响应中所需的数据,从而有助于避免有时使用 REST API 看到的大型响应对象和多个调用。 GraphQL 服务定义了一个合约,客户端可…

Java【手撕滑动窗口】LeetCode 3. “无重复字符的最长子串“, 图文详解思路分析 + 代码

文章目录 前言一、长度最小子数组1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链…

pytest pytest.ini 配置日志输出至文件

创建pytest.ini 文件 [pytest] log_file pytest_log.txt log_file_level INFO log_file_date_format %Y-%m-%d %H:%M:%S log_file_format %(asctime)s | %(filename)s | %(funcName)s | line:%(lineno)d | %(levelname)s | %(message)s import pytest import loggingdef …

华为OD机试 - 租车骑绿道 - 双指针(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路1、输入2、输出3、说明4、双指针算法 五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 一、题目描述 部门组织绿岛骑行团建活动,租用公共双人自行车骑行,…

谈谈对OceanBase单机分布式一体化的思考

关于作者: 杨传辉,OceanBase CTO。2010 年作为创始成员之一加入 OceanBase 团队,主导了 OceanBase 历次架构设计和技术研发,从无到有实现 OceanBase 在蚂蚁集团全面落地。同时,他也主导了两次 OceanBase TPC-C 测试并打…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【四】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【四】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章…

JavaScript设计模式(一)——构造器模式、原型模式、类模式

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

JVM 是怎么设计来保证new对象的线程安全

1、采用 CAS 分配重试的方式来保证更新操作的原子性 2、每个线程在 Java 堆中预先分配一小块内存,也就是本地线程分配缓冲(Thread Local AllocationBuffer,TLAB),要分配内存的线程,先在本地缓冲区中分配&a…

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件,用于在Airflow中管理和调度Apache Spar…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

深度学习4. 循环神经网络 – Recurrent Neural Network | RNN

目录 循环神经网络 – Recurrent Neural Network | RNN 为什么需要 RNN ?独特价值是什么? RNN 的基本原理 RNN 的优化算法 RNN 到 LSTM – 长短期记忆网络 从 LSTM 到 GRU RNN 的应用和使用场景 总结 百度百科维基百科 循环神经网络 – Recurre…

【数学建模】-- 模糊综合评价

模糊综合评价(Fuzzy Comprehensive Evaluation)是一种用于处理不确定性和模糊性信息的决策分析方法。它通常用于解决复杂的多指标决策问题,其中各指标之间可能存在交叉影响和模糊性的情况。模糊综合评价通过将不确定性和模糊性量化&#xff0…

火山引擎边缘云,助你沉浸式回忆童年

发现了吗?在抖音、西瓜视频上能观看4K修复的经典港片了!得益于抖音、中国电影资料馆、火山引擎共同发起的“经典香港电影修复计划”,我们童年时期看过的《大话西游之大圣娶亲》《武状元苏乞儿》等22部港片以更清晰、流畅、颜色饱满的状态回归…

windows 中pycharm中venv无法激活

1.用管理员身份打开Windows PowerShell 2.进入项目的:venv\Scripts 如:D: (1): cd .\project\venv\Scripts\ (2): 执行命令: Set-ExecutionPolicy RemoteSigned (3): 选择:Y (4): .\activate