Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程
汇创慧玩
- 写在前面
- 1. 查看系统架构相关指令
- 2. ARM64交叉编译器环境搭建
- 3. Qt编译arm64环境搭建
- 4. 配置 Qt的本地aarch64交叉编译器
- 5. 工程建立及编译验证
写在前面
苦辣酸甜时光八载,春夏秋冬志此一生
Qt简介:
Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
在探索前期安装过程也是出现了星星点点的未知错误,摸黑探路,绕了许多弯路。
最近由于项目需要做国产系统适配,软件需要适配不同架构CPU!基于此特将经验寄予此文,望更多志同道合的朋友在这条探索的路上少走弯路,尽入主题!
环境:
PC系统:Ubutu20.04(x86_64架构) <本机>
Qt版本:Qt5.12.8(GCC 9.3.0,64bit) <本机>
Qt Creator 版本:4.11.0 <本机>
交叉编译器:gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <本机>
国产系统:Kylin Linux Advanced Server release V10(4.19.90-25.10.v2101.ky10.aarch64) 部署环境<即arm64架构>
GCC:v8.3.0 部署环境<即arm64架构>
1. 查看系统架构相关指令
Ubutu 本机
uname
uname -a
uname -i
uname -r
lsb_release -a
lsb_release -i
lsb_release -r

Kylin Linux 部署环境<即arm64架构>
uname
uname -a
uname -i
uname -r
nkvers
查看CPU核数,它会显示逻辑核心数:
lscpu
nproc
2. ARM64交叉编译器环境搭建
1) 选定编译工具: gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <可选其他版本>
2) 源码安装交叉编译工具:
源码安装指定版本是为适配所部署的环境v8.3.0 ,笔者安装了指定版本,大家没有特殊需求可参考 3)指令安装交叉编译工具
①下载:
注1: 从arm Developer 下载指定版本编译器;

注2: 这里还可以通过百度网盘下载v8.3.0
② 安装:
解压:
tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
重命名:
mv gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu aarch64-linux-gnu-8.3.0
将目标复制到指定目录下:<一般复制到 /opt 目录下,笔者复制到 ~/path/go 目录下>
sudo cp -rf aarch64-linux-gnu-8.3.0/ /opt
or
mkdir -p ~/path/go
cp -rf aarch64-linux-gnu-8.3.0/ ~/path/go
然后在环境变量里 /etc/profile <笔者在此文件添加>或 ~/.bashrc 添加全局变量 <注意添加自己正确路径,笔者前面未重命名>
$PATH:后面路径为gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin的解压路径
sudo vim /etc/profile
#borrieguo add arm aarch64
export PATH=$PATH:~/path/go/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin

然后加载环境变量<添加在那个文件就source那个>
source /etc/profile
or
source ~/.bashrc
查看配置是否成功:输入aarch64 +TAB是否出现提示(有对应版本即表示配置成功):

查看安装路径:
which aarch64-linux-gnu-gcc-8.3.0

3) 指令安装交叉编译工具: 源码安装交叉编译工具和指令安装交叉编译工具选其中一个操作即可
指令安装自动适配本机合适版本,无需指定较为方便
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
安装后验证下是否ok,直接输aarch64- 加Tab键如果能自动补全aarch64-linux-gnu-gcc那就问题不大。
查看版本信息:
aarch64-linux-gnu-gcc -v
能查到如下图所示,说明安装完成。

查看安装路径:
which aarch64-linux-gnu-gcc

4) 编译源码测试:
为了进一步验证交叉编译器环境搭建是否搭建成功,可进行编译源码进行验证测试。(可省略)
笔者验证的是一个C++程序。main.cpp 内容如下:
#include <iostream>using namespace std;int main()
{cout << "Hello World!" << endl;return 0;
}
将 main.cpp 源码编译成arm64可执行文件,指令如下:
aarch64-linux-gnu-g++ -o main main.cpp
编译通过后通过file指令查看文件类型是否是ELF:64bit LSB shared object,ARM aarch64...。如果是,则完成源码编译。
file main

也可通过readelf -h指令查看文件系统架构是否是AArch64。如果是,则完成源码编译。
readelf -h main

3. Qt编译arm64环境搭建
1) 选定Qt版本: 5.12.8 <可选其他版本>
2) Qt源码下载:
因为后面要在开发板上跑Qt程序,所以必须下载Qt源码包,然后用交叉编译工具进行编译,才能得到在目标平台上可以运行的Qt SDK。笔者本机上的Qt版本为Qt5.12.8(GCC 9.3.0,64bit) ,故下载Qt5.12.8的源码,目的就是在本机上构建两个Qt环境(x86_64和arm64)。实现在本机的PC上配置ARM64的编译环境,在本机的PC上编译完成后,配置Qt交叉编译环境,然后再用Qt编译自己写的代码,最后copy部署到ARM平台上运行即可。
注1:Qt官网下载地址

注2:百度网盘下载v5.12.8
3) Qt源码安装:
①解压:
下载了qt-everywhere-src-5.12.8.tar.xz,然后通过xz命令解压出qt-everywhere-src-5.12.8.tar文件,再通过tar命令解压qt-everywhere-src-5.12.8.tar文件,得到文件夹:qt-everywhere-src-5.12.8。
xz -d qt-everywhere-src-5.12.8.tar.xz
tar -xvf qt-everywhere-src-5.12.8.tar
or
tar -xvf qt-everywhere-src-5.12.8.tar.xz

②定义SDK安装路径
强烈不建议在Qt源码的目录下直接进行编译,那样会污染源码所在目录。建议在Qt源码所在的同级目录下,新建一个文件夹用来存放编译过程中产生的临时文件。一定要注意源码路径不能含有中文!
创建编译过程路径:
mkdir Qt-5.12.8-build
创建最终安装路径:
mkdir Qt-5.12.8-arm64
③安装
安装准备1)
打开 qt-everywhere-src-5.12.8/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf 配置文件,并修改为如下所示内容 ,因为一会我们要用到这个里面的内容,所以我们要先修改一下这里面的编译器。
根据自己的交叉编译器来进行编译修改,本机的交叉编译器为aarch64-linux-gnu-
如下所示:

注:上面的qmake.conf文件中,如果Ubuntu有好多个交叉编译器,一定要在交叉编译器前面加绝对路径,不然就会像我一开始make的时候会出现“not found”这些错误,或者出现下面这些错误
Makefile:51: recipe for target ‘sub-corelib-make_first’ failed
make[2]: *** [sub-corelib-make_first] Error 2
make[2]: Leaving directory ‘~/path/qt/qt-everywhere-opensource-src-5.12.8/qtbase/src’
Makefile:46: recipe for target ‘sub-src-make_first’ failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory ‘~/path/qt/qt-everywhere-opensource-src-5.12.8/qtbase’
Makefile:77: recipe for target ‘module-qtbase-make_first’ failed
make: *** [module-qtbase-make_first] Error 2
安装准备2)
进入Qt-5.12.8-build文件夹执行configure
./../qt-everywhere-src-5.12.8/configure -prefix /home/airobot/path/qt/Qt-5.12.8-arm64 -make libs -xplatform linux-aarch64-gnu-g++ -skip qtdeclarative -no-opengl
说明:
-prefix 代表你的安装文件夹,即上面定义的最终安装路径,注意目录要对应;
-xplatform 代表你所制定的编译器;
-no-opengl -no表示不编译该模块;跳过编译openGL(因为我已经安装了Qt,所以不需要界面);
-skip qtdeclarative 跳过 qtdeclarative编译;
其它参数:
-opensource 编译开源版 -commercial 编译商业版 (参数可选);
-static 生成静态库.a文件 -shared 生成动态库so文件 (参数可选,默认是shared)注:静态库与动态库区别是在生成目标文件的链接方式上,静态库采用静态链接,在生成的目标文件(如执行文件)中会包含库文件代码,而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
-force-debug-info 强制生成调试信息 (参数可选)这个参数是让Qt release版本也生成.pdb文件。这个文件有什么作用呢?它就是我们在release版本下设置了异常捕获信息函数,打印出错堆栈信息所必须的文件。如果程序没用开启异常捕获选项,是不需要开启这个参数的。
-opengl dynamic 指定opengl库 (参数可选)
OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。 OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
-skip 跳过该模块
-nomake 不编译该模块
-mp 启动多核编译
注:-skip和-nomake都可省略,但是-skip qtdeclarative这个参数不能省略,qtdeclarative模块有需要依赖的库,这里不跳过编译会失败。
如果有别的需求,可以./configure -help查看具体命令

也可使用“vim autoconfigure.sh”命令,新建“autoconfigure.sh”脚本,然后我们需要用 configure 生成下 Makefile,因为命令比较长,我们一般都是创建一个脚本,然后执行我们这个脚本生成 Makefile。
autoconfigure.sh 如下:
#!/bin/sh
#export PATH=$PATH:~/path/go/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
./../qt-everywhere-src-5.12.8/configure -prefix ~/path/qt/Qt-5.12.8-arm64 \
#-static \
#-release \
-opensource \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
#-optimized-qmake \
#-pch \
#-qt-libjpeg \
#-qt-zlib \
-no-opengl \
#-skip qt3d \
#-skip qtcanvas3d \
#-skip qtpurchasing \
#-no-sse2 \
#-no-sse3 \
#-no-ssse3 \
#-no-sse4.1 \
#-no-sse4.2 \
#-no-avx \
#-no-avx2 \
#-no-mips_dsp \
#-no-mips_dspr2 \
#-qt-zlib \
#-no-openssl \
#-no-xcb \
#-no-cups \
#-no-iconv \
#-no-evdev \
#-no-icu \
#-no-fontconfig \
#-nomake examples \
#-nomake tools \
#-skip qtvirtualkeyboard \
#-qpa linuxfb \
#-no-opengl \
#-no-libinput \
#-no-gstreamer \
#-no-system-proxies \
#-no-slog2 \
#-no-lgmon \
#-linuxfb \
#-v \
#-qt-libjpeg \
#-qt-libpng \
#-no-libproxy \
#-no-dbus \
#-no-glib \
#-no-compile-examples \
-skip qtdeclarative \
修改权限:
sudo chmod +x autoconfigure.sh
执行脚本:
./autoconfigure.sh

提示选择版本,输入o,回车
询问是否接受协议,输入y,回车
安装准备3)
编译及安装
大概编译十来分钟
make -j4 2>&1 | tee build.log

make install

完成后进入~/path/qt/Qt-5.12.8-arm64/lib路径,可以查看文件属性。系统架构为AArch64
readelf -h libQt5DBus.so

这就是我们需要的东西,到时候拷贝到开发板
4. 配置 Qt的本地aarch64交叉编译器
1) 编译器(Compliers)配置:
编译器(Compliers)安装完交叉编译工具,系统能自动找到。如果找不到需要自己通过添加(Add)按钮添加
which aarch64-linux-gnu-gcc
which aarch64-linux-gnu-g++
添加步骤:
C++编译器


配置完成通过Apply按钮应用生效。
C编译器


配置完成通过Apply按钮应用生效。
2) Qt版本(Qt Versions)配置:
Qt Versions需要添加一个自定义的版本,qmake需要刚编译安装后的qmake

配置完成通过Apply按钮应用生效。
3) 构建套件(Kit)配置:
Kit需要选择好自己新添加的Qt Version和编译器。

配置完成通过Apply按钮应用生效,通过OK按钮配置完成。
5. 工程建立及编译验证
新建工程,并选择上面配置的构建套件(Kit)

编译后得到可执行文件:

可执行文件为ARM aarch64架构,验证成功!
至此,恭喜您!Qt的交叉编译环境已成功安装,可以开始使用了!!!
下一个教程将讲述: Qt教程4-Ubuntu(x86_64)上用QEMU建立arm64(aarch64)的模拟开发环境,让您编译的ARM aarch64架构的程序在本机能够实现运行验证!
后续教程还将讲述: Qt教程5-Ubuntu(x86_64)上交叉编译的QT程序SSH直接部署到远程国产系统(ARM aarch64架构),让您在本机Qt开发的ARM aarch64架构程序,通过配置 Qt的SSH aarch64交叉编译器,从而共享所要部署的环境来直接在本机Qt上实现运行验证!
感谢阅读,我是汇创慧玩,希望文章能够解决您的问题。
事为之,须极致!
相关文章:
Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程
汇创慧玩 写在前面1. 查看系统架构相关指令2. ARM64交叉编译器环境搭建3. Qt编译arm64环境搭建4. 配置 Qt的本地aarch64交叉编译器5. 工程建立及编译验证 写在前面 苦辣酸甜时光八载,春夏秋冬志此一生 Qt简介: Qt(官方发音 [kju:t]ÿ…...
2024年华为OD机试真题-最长子字符串的长度(二)-Python-OD统一考试(C卷)
题目描述: 给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出l、o、x 字符都恰好出现了偶数次最长子字符串的长度。 输入描述: 输入是一串小写的字母组成的字符串。 输出描述: 输出是一个整数 补充说明: 1 <= s.length <= 5 x 10^5 s 只包含小写英文字母…...
【24届数字IC秋招总结】正式批面试经验汇总5——蔚来、tp-link
文章目录 一、蔚来-数字芯片验证工程师1.1 一面面试问题1.2 二面面试问题二、tp-link-数字IC验证工程师2.1 面试问题一、蔚来-数字芯片验证工程师 面试时间:9.6 10.6 1.1 一面面试问题 1、 讲下项目结构 2、 scoreboard如何进行数据对比的 3、 golden 数据怎么产生的 4、 在…...
【JAVA基础篇教学】第八篇:Java中List详解说明
博主打算从0-1讲解下java基础教学,今天教学第八篇:Java中List详解说明。 在 Java 编程中,List 接口是一个非常常用的集合接口,它代表了一个有序的集合,可以包含重复的元素。List 接口提供了一系列操作方法,…...
RN向上向下滑动组件封装(带有渐变色)
这段组件代码逻辑是出事有一个View和下面的块,下面的块也就是红色区域可以按住向上向下滑动,当滑动到屏幕最上面则停止滑动,再向上滑动的过程中,上方的View的背景色也会有个渐变效果,大概逻辑就是这样 代码如下 import React, {useEffect, useRef, useState} from react; impo…...
27、Lua 学习笔记之五(Lua中的数学库)
Lua中的数学库 Lua5.1中数学库的所有函数如下表: math.pi 为圆周率常量 3.14159265358979323846 数学库说明例子方法abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5)1.04719755asin反正弦函数math.asin(0.5)0.52359877atan2x / y的反正切值math.atan2(9…...
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:C❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、拷贝构造函数 1、概念 2、特征 二、赋值运算符重载 1、运算符重载 2、赋值运算符重载 3、前置…...
OpenHarmony实战开发-页面深色模式适配。
介绍 本示例介绍在开发应用以适应深色模式时,对于深色和浅色模式的适配方案,采取了多种策略如下: 1. 固定属性适配:对于部分组件的颜色属性,如背景色或字体颜色,若保持不变,可直接设定固定色值…...
域名解析出现错误,该如何解决?
域名作为网络地址,是我们访问网站的必经之路,域名解析就是把你的域名解析成一个ip地址,在使用的过程中遇到域名解析文件异常也是常有的事。如果域名解析出现错误,该怎么解决呢? 一、打开网页时,显示域名解析…...
从iPhone恢复已删除照片的最佳软件
本文分享了从iPhone恢复已删除照片的最佳软件。如果您正在寻找如何从iPhone恢复已删除的照片,请查看这篇文章。 为什么您需要软件从iPhone恢复已删除的照片? 没有什么比丢失iPhone上的重要数据更痛苦的了,尤其是一些具有珍贵回忆的照片。有时…...
MySQL模糊查询
一、MySQL通配符模糊查询(%,_) 1.1.通配符的分类 1.“%”百分号通配符:表示任何字符出现任意次数(可以是0次) 2.“_”下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然…...
QEMU_v8搭建OP-TEE运行环境
文章目录 一、依赖下载二、设置网络三、安装下载四、运行OP-TEE 一、依赖下载 更新依赖包,下载一系列依赖。比如Python需要Python3.x版本,需要配置git的用户名和邮箱等。这里不详细展开了,很多博客都有涉及到。 二、设置网络 这一点非常重…...
C++11 设计模式0. 设计模式的基本概念,设计模式的准则,如何学习设计模式,24种设计模式的分为3大类
一 设计模式的基本概念: 模式:指事物的标准样式 或者 理解成 针对特定问题的可重用解决方案。 设计模式,是在特定问题发生时的可重用解决方案。 设计模式一般用于大型项目中。 大型项目中,设计模式保证所设计的模块之间代码的灵…...
(十)C++自制植物大战僵尸游戏设置功能实现
植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏,以获得最佳的游戏体验。不同的游戏和平…...
数据结构——通讯录(顺序表的实战项目)
(—).通讯录的功能 大家应该都十分了解通讯录的功能吧,无非就是对联系人的增添删除,还有信息的修改,并且联系人信息要包含名字,电话,性别,地址等。我把通讯录的功能总结如下&#x…...
数据库-Redis(14)
目录 66.Redis为什么主从全量复制使用RDB而不是使用AOF? 67.Redis为什么还有无磁盘复制模式? 68.Redis为什么还会有从库的从库设计?...
Thinkphp5.0命令行创建验证器validate类
前言 最近接手了个用FastAdmin(基于tp5)写的项目,发现命令行只提供生成controller和model的命令,没有提供make:validate命令,而5.1及以上版本是有的,对于使用tp5.0框架或者基于tp5.0的第三框架(…...
人民网至顶科技:《开启智能新时代:2024中国AI大模型产业发展报告发布》
3月26日,人民网财经研究院与至顶科技联合发布《开启智能新时代:2024年中国AI大模型产业发展报告》。该报告针对AI大模型产业发展背景、产业发展现状、典型案例、挑战及未来趋势等方面进行了系统全面的梳理,为政府部门、行业从业者以及社会公…...
AI大模型探索之路-应用篇13:企业AI大模型选型指南
目录 前言 一、概述 二、有哪些主流模型? 三、模型参数怎么选? 四、参数有什么作用? 五、CPU和GPU怎么选? 六、GPU和显卡有什么关系? 七、GPU主流厂商有哪些? 1、NVIDIA芯片怎么选? 2、…...
【安全】查杀linux上c3pool挖矿病毒xmrig
挖矿平台:猫池 病毒来源安装脚本 cat /root/c3pool/config.jsoncrontab -r cd /root/c3poolcurl -s -L http://download.c3pool.org/xmrig_setup/raw/master/setup_c3pool_miner.sh | LC_ALLen_US.UTF-8 bash -s 44SLpuV4U7gB6RNZMCweHxWug7b1YUir4jLr3RBaVX33Qxj…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...






