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

Qt5开发环境-银河麒麟V10ARM平台

目录

      • 前言
      • 1.源码下载
      • 2.编译安装
        • 2.1 安装依赖
        • 2.2 编译
        • 2.3 遇到的问题
        • 2.4 安装
      • 3.编译qtwebengine
        • 3.1 安装依赖库
        • 3.2 编译
        • 3.3 遇到的问题
        • 3.4 安装
      • 4.配置开发环境
      • 5.测试
      • 6.程序无法输入中文的问题
      • 总结

前言

近期因参与开发的某个软件需要适配银河麒麟v10arm 平台,于是自己搭建起一套Qt 开发环境,在此记录下具体过程,以供有需要的朋友参考。一开始手上并没有Arm架构的PC,先在Windows下用Vs2017和QtCreator 开发,软件开发快结束的时候Arm PC到了。Qt 没有提供可直接安装的arm架构安装包,只能自己通过编译Qt 来搭建开发环境。

1.源码下载

下载Qt5.12.7,从这里下载Qt5.12.7 。一定要选择后缀为.tar.xz的源码包,zip源码包亲测编译时会遇到奇怪的问题。
在这里插入图片描述

2.编译安装

2.1 安装依赖

  • 安装OpenGL依赖
    sudo apt-get install build-essential
    sudo apt-get install libgl1-mesa-dev
    sudo apt-get install libglu1-mesa-dev
    sudo apt-get install libegl1-mesa-dev
    sudo apt-get install freeglut3-dev

2.2 编译

打开终端,cd到源码所在目录,执行configure程序并make,这里以编译release版本为例

./configure -prefix  /opt/qt5.12.7  -opensource  -release  -nomake tests -skip qtvirtualkeyboard 接着执行make 命令make -j4

2.3 遇到的问题

编译过程遇到了一些问题,记录如下
1)问题一

/usr/bin/ld.gold:错误:cannot find -lclip2tri
/usr/bin/ld.gold:错误:cannot find -lpoly2tri
/usr/bin/ld.gold:错误:cannot find -lclipper

该问题的原因是qtlocation模块未编译完整,重新执行 make -j4 module-qtlocation 命令 可消除此错误,也可以在执行configure命令的时候添加 -skip qtlocation 来跳过编译。
2)问题二
xcb-xfixes development package not found
这个问题的解决方式是安装对应的软件包,执行下面的命令来安装,安装之后重新执行 make -j4。

sudo apt-get install libxcb-util0-dev

2.4 安装

除此之外还有其他一些小问题,根据错误提示就能解决,没记录下来。
make 结束之后,执行 sudo make install 命令,会将编译好的Qt开发环境安装到之前设置的目录下 /opt/qt5.12.7 。

3.编译qtwebengine

qtwebengine是后期需要引入echarts时才编译的,编译过程中也遇到了一些奇怪的问题,特在此记录下来备忘。qtwebengine需要用到qmake及Qt的一些核心库,因此必须先确保第3节中的qt编译完成。

3.1 安装依赖库

sudo apt-get install bison build-essential gperf flex libasound2-dev\
libcups2-dev libdrm-dev libegl1-mesa-dev libnss3-dev libpci-dev\
libpulse-dev libudev-dev nodejs libxtst-dev gyp ninja-build\
libssl-dev libxcursor-dev libxcomposite-dev libxrandr-dev

在安装 libnss3-dev 时报错,大概意思是版本不对,使用sudo apt-get install libnss3-dev = xxxversion ,安装成功。错误如下:

ibnss3-dev : 依赖: libnss3 (= 2:3.49.1-1kylin1.5) 但是 2:3.49.1-1kylin1.6 正要被安装

解决方法,安装指定版本的依赖包:
sudo apt-get install libnss3=2:3.49.1-1kylin1.5

3.2 编译

打开终端, cd 到 src/qtwebengine 目录下,执行命令:

../qtbase/bin/qmake qtwebengine.pro

3.3 遇到的问题

  • gperf not found

执行完qmake 命令后报错:gperf not found,以为gperf 没有安装成功,再次使用apt-get 安装缺少的依赖,sudo apt-get install gperf ,安装完成后需要将configure命令生成的缓存清除掉然后重新执行configure 命令,并再次执行qmake,命令如下:

rm config.cache
./configure -prefix  /opt/qt5.12.7  -opensource  -release  -nomake tests -skip qtvirtualkeyboard 
../qtbase/bin/qmake qtwebengine.pro
make -j4
  • X11/Xlib-xcb.h 找不到
    不出意外开始编译了,经过漫长的等待,编译又出错了,这次遇到的是:fatal error X11/Xlib-xcb.h 文件不存在。第一感觉是缺少对应的库,经过一番查找发现需要安装 libx11-dev ,于是执行 sudo apt-get install libx11-dev,成功安装后仍然报错。通过find命令查找该头文件,确实没有找到 find /usr -name Xlib-xcb.h 。 我耐着性子查询了很多资料还是没能解决问题,这时只剩下最后一条路了,那就是下载libx11-dev源码,从libx11地址下载系统libX11版本对应的libx11-dev源码后,与当前系统/usr/lib/include/X11 目录进行比较发现系统重确实少了Xlib-xcb.h 文件,而下载的源码中刚好有这个文件,于是将 Xlib-xcb.h 复制到 /usr/lib/include/X11 目录下,重新执行 make -j4 继续编译。
  • libXlib-xcb.so 找不到
    又是漫长的等待过后报了一个错,这次是 libXlib-xcb.so 找不到,通过find命令发现在 /usr/lib/arm-linux-gnueabihf/ 目录下有这个库,根据报错信息提示在/usr/lib/aarch64-linux-gnu/ 目录下创建了一个 软连接 ln -s /usr/lib/arm-linux-gnueabihf/libXlib-xcb.so libXlib-xcb.so, 接着再次执行make -j4 ,这次没有提示libXlib-xcb.so 找不到,而是提示libXlib-xcb.so 不兼容。
  • libXlib-xcb.so 不兼容
    针对这个问题,我打算重新编译libXlib 库。首先安装libtool 和 autoconfig
sudo apt-get install libtool autoconf

切换到libXlib 源码根目录下 执行

 ./autogen.shconfigure.ac:24: error: must install xorg-macros 1.15 or later before running autoconf/autogen

下载对应的 rpm 安装包,下载地址

sudo rpm -ivh xorg-x11-util-macros-1.19.3-4.el9.noarch.rpm --nodeps --force

安装后再次执行

./autogen.sh
make 

编译结束后会生成libXlib-xcb.so ,把库拷贝到/usr/lib 目录下, 删除之前创建的 /uar/lib/aarch64-linux-gnu 目录下的软连接,重新创建对应的软连接,然后回到qtwebengine 根目录下再次 执行 make -j4

  • open CFI at the end of file; missing .cfi_endproc directive
    这个问题是qtwebengine 编译过程中由于占用内存太多,而系统内存不足导致的报错。我用的设备内存是8G,交换空间是9G,为了解决这个问题将交换空间增加了20G,最终才编译成功。

以下是增加交换空间用到的几个命令:

#创建swap文件
mkdir -p /var/cache/swap
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=1G count=20
#转换swap文件
sudo mkswap -f /var/cache/swap/swap0
#激活swap文件
sudo swapon /var/cache/swap/swap0
#卸载
sudo swapoff /var/cache/swap/swap0
#永久生效
sudo vim /etc/fstab
#写入以下内容:
/var/cache/swap/swap0 none swap defaults 0 0

再次执行make -j4这次成功生成了 libQt5WebEngine 等几个qtwebengine 用到的库。

3.4 安装

在qtwebengine 根目录下执行sudo make install ,生成的库会自动安装到/opt/qt5.12.7目录下。

4.配置开发环境

首先在软件商店中下载并安装QtCreator,安装完成之后配置QtVersion 、编译器、Kits等。可以参考这篇文章配置链接

5.测试

新建一个项目,运行测试。这里遇到一个问题,程序可正常编译运行,但是源码文件确报错 unexpected class name,这是因为缺少一个软件包,通过安装这个软件包解决了此问题,安装命令如下:

sudo apt-get install libclang-common-8-dev

安装完成后重启QtCreater,不会再出现上面的问题了。

6.程序无法输入中文的问题

经过查询发现是插件问题,自己编译的qt开发环境中缺少插件 libfcitxplatforminputcontextplugin.so,这里有两个办法解决这个问题,一个是下载源码自己编译该插件,另一个是在系统中找到这个插件,并拷贝到对应的插件目录中。这里采用第二种方式解决了该问题,如果第二种方式不能解决,那就尝试用第一种方式自己编译插件吧。

总结

从零开始搭建麒麟系统arm平台下的Qt开发环境还是挺折磨人的,在这个过程中会遇到很多新的问题,只有自己动手实践一遍才能真正体会。我把完整的qt环境上传到git上了,如果你也刚好需要而又不想折腾的话可以直接下载使用。下载地址:
以上就是本篇的所有内容了,欢迎评论区留言讨论!!!

相关文章:

Qt5开发环境-银河麒麟V10ARM平台

目录 前言1.源码下载2.编译安装2.1 安装依赖2.2 编译2.3 遇到的问题2.4 安装 3.编译qtwebengine3.1 安装依赖库3.2 编译3.3 遇到的问题3.4 安装 4.配置开发环境5.测试6.程序无法输入中文的问题总结 前言 近期因参与开发的某个软件需要适配银河麒麟v10arm 平台,于是…...

「Qt」文件读写操作

0、引言 我们知道 C 和 C 都提供了文件读写的类库,不过 Qt 也有一套自己的文件读写操作;本文主要介绍 Qt 中进行文件读写操作的类 —— QFile。 1、QFileDialog 文件对话框 一般的桌面应用程序,当我们想要打开一个文件时,通常会弹…...

0101前期准备-大数据学习

文章目录 1 前言2 配置VMware虚拟机2.1 设置主机名和固定IP2.2 本地系统与Linux系统配置主机名映射2.3 配置虚拟机之间用户的SSH免密互通2.4 安装JDK环境2.5 关闭防火墙和SELinux2.6 更新时区和同步时间2.7 保存虚拟机快照 结语 1 前言 我们从基础的hadoop开始学起,…...

TypeScript教程(四)基本运算符

一、运算符 TypeScript包含以下几种运算符: 1.算术运算符 2.逻辑运算符 3.关系运算符 4.按位运算符 5.赋值运算符 6.三元/条件运算符 7.字符串运算符 8.类型运算符 1.算术运算符 y5 运算符描述例子x 运算结果y 运算结果加法xy275-减法xy-235*乘法xy*2105…...

计算机网络的性能指标

计算机网络的性能指标 1. 速率 速率是指数据在网络中传送的速度,通常用比特率或数据率来表示,单位是b/s,或bit/s,即比特每秒,或者bps(bit per second)。 速率单位:1 Ybps 10^24 bps(尧), 1 Zbps 10^21…...

BBS项目day04 文章详情页、点赞点菜、评论功能

一、路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.register)…...

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…...

Nginx反向代理技巧

跨域 作为一个前端开发者来说不可避免的问题就是跨域&#xff0c;那什么是跨域呢&#xff1f; 跨域&#xff1a;指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对javascript施加的安全限制。浏览器的同源策略是指协议&#xff0c;域名…...

kafka--kafka的基本概念-副本概念replica

三、kafka的基本概念-副本概念replica Broker 表示实际的物理机器节点 Broker1中的绿色P1表示主分片Broker2中的蓝色P1表示副本分片&#xff0c;其余类似&#xff0c;就是主从的概念&#xff0c;如果一个Broker挂掉了&#xff0c;还有其它的节点来保证数据的完整性 P可以看做分…...

css伪元素实现li列表圆点相连+锚点跳转悬浮窗实现

实现效果&#xff1a; html代码&#xff1a; <div class"sidenav"><ul class"nav-text progressbar"><!-- data-target的值对应要跳转的模块的id --><li data-target"module1"><div class"text">锚点…...

IronPDF for .NET Crack

IronPDF for .NET Crack ronPDF现在将等待HTML元素加载后再进行渲染。 IronPDF现在将等待字体加载后再进行渲染。 添加了在绘制文本时指定旋转的功能。 添加了在保存为PDFA时指定自定义颜色配置文件的功能。 IronPDF for.NET允许开发人员在C#、F#和VB.NET for.NET Core和.NET F…...

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解&#xff08;多态篇&#xff09; 目录 【C进阶】继承、多态的详解&#xff08;多态篇&#xff09;多态的概念多态的定义及实现多态的构成条件&#xff08;重点&#xff09;虚函数虚函数的重写&#xff08;覆盖、一种接口继承&#xff09;C11 override…...

excel快速选择数据、选择性粘贴、冻结单元格

一、如何快速选择数据 在excel中&#xff0c;希望选择全部数据&#xff0c;通常使用鼠标选择数据然后往下拉&#xff0c;当数据很多时&#xff0c;也可单击单元格使用ctrl A选中全部数据&#xff0c;此外&#xff0c;具体介绍另一种方法。 操作&#xff1a;ctrl shift 方向…...

【数仓建设系列之一】什么是数据仓库?

一、什么是数据仓库&#xff1f; 数据仓库(Data Warehouse&#xff0c;简称DW)简单来讲&#xff0c;它是一个存储和管理大量结构化和非结构化数据的存储集合&#xff0c;它以主题为向导&#xff0c;通过整合来自不同数据源下的数据(比如各业务数据&#xff0c;日志文件数据等)…...

Vue2-配置脚手架、分析脚手架、render函数、ref属性、props配置项、mixin配置项、scoped样式、插件

&#x1f954;:总有一段付出了没有回报的日子 是在扎根 更多Vue知识请点击——Vue.js VUE2-Day6 配置脚手架脚手架结构render函数vue.js与vue.runtime.xxx.js的区别引入render函数为什么要引入残缺的vue呢&#xff1f; 脚手架默认配置ref属性props配置项传递数据接收数据注意点…...

VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

本例主要讲一下&#xff0c;用VC6如何生成DLL&#xff0c;用工具WinHex取得DLL全部内容&#xff0c;VC2015项目加载内存中的DLL函数&#xff0c;并调用函数的示例。 本例中的示例代码下载&#xff0c;点击可以下载 一、VC6.0生成示例DLL项目 1.新建项目&#xff0c;…...

人流目标跟踪pyqt界面_v5_deepsort

直接上效果图 代码仓库和视频演示b站视频006期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; YOLOv5 DeepSORT介绍 YOLOv5 DeepSORT是一个结合了YOLOv5和DeepSORT算法的目标检测与多目标跟踪系统。让我为您详细解释一…...

angular 子组件ngOnChanges监听@input传入的输入属性

在进入主题之前&#xff0c;先了解一下angular的生命周期。 生命周期 钩子分类 指令与组件共有的钩子 ngOnChangesngOnInitngDoCheckngOnDestroy 组件特有的钩子 ngAfterContentInitngAfterContentCheckedngAfterViewInitngAfterViewChecked 生命周期钩子的作用及调用顺序 …...

移植PeerTalk开源库IOS的USB通信监听服务到QT生成的FFmpeg工程

1.添加生成的PeerTalk库 下图选中部分为FFmpeg依赖库 将USB通信服务的m与h文件添加到工程 因为OC文件使用了弱指针,所以要启用弱指针支持 因为FFmpeg拉流动用到本地网络,所以要在plist文件中启动本地网络使用 设置PeerTalk为嵌入模式 设置Runpath Search Paths为@executable_p…...

PHREEQC模型化学热力学理论和数据库.dat、各种模拟反应平衡反应模拟、化学动力模拟、反应迁移模拟

PHREEQC是一个用于计算多种低温水文地球化学反应的计算机软件&#xff0c;以离子缔合水模型为基础的PHREEQC能够&#xff08;1&#xff09;计算物质形成种类与饱和指数&#xff1b;&#xff08;2&#xff09;模拟地球化学反演过程&#xff1b;&#xff08;3&#xff09;计算批反…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...