Qt for OpenHarmony 编译鸿蒙调用的动态库

简介

Qt for Harmony​ 是跨平台开发框架 ​Qt​ 与华为 ​OpenHarmony​ 操作系统的深度集成方案,由 Qt Group 与华为联合推动。其核心目标是为开发者提供一套高效工具链,实现 ​​“一次开发,多端部署”​,加速 OpenHarmony 生态的应用迁移与创新。

本文主要实现在Windows端使用Harmony NDK在Qt Creator中编译生成Qt for OpenHarmony调用的动态库。

资源下载

在编译之前需要先下载相关的工具包然后进行环境配置。

1.Qt SDK

Qt Wiki官网文档中介绍可以获取Qt for OpenHarmony的源码,然后编译源码生成SDK,但是构建过程比较麻烦,感兴趣的可以自己去按照步骤操作一遍,地址在这里。

此外,openharmony-sig项目中提供了SDK包,供使用者下载,发布包中只提供了Windows平台下的SDK,直接下载现成的,可以省去编译步骤。目前发布的最新版是:Qt For OpenHarmony Alpha v6版本
在这里插入图片描述
我这边下载的是 alpha_v6 Qt5.15.12 OpenHamrony arm64-v8a二进制包
在这里插入图片描述
下载后可以看到,该版本名称是 Qt5.15.12_alpha_v6_arm64-v8a_openharmony_ndk_4.1.7.8_community_win,这是基于鸿蒙OS v4.1.7版本,Qt版本是Qt5.15.12

解压待用。

2. DevEco Studio安装

DevEco Studio是华为推出的集成开发环境(IDE),专为HarmonyOS应用开发设计。支持HarmonyOS多设备、多语言开发,提供丰富的工具链和模板,帮助开发者高效构建全场景应用。
安装DevEco Studio主要是为了方便下载不同版本的鸿蒙SDK,下载DevEco Studio会默认自带一个sdk,需要选择一个自己想要的版本。
下载地址在这里
在这里插入图片描述
下载安装后,在文件->设置,打开设置页面:
在这里插入图片描述
然后点击OpenHarmony SDK页面
在这里插入图片描述
上一步中我们下载的Qt SDK对应的OpenHarmony 版本是4.1.7,所以这里我们需要下载对应的鸿蒙SDK版本,需要注意的是,选择OpenHarmony SDK保存的位置一定不能带有空格,否则后面的配置编译将会出问题。

3.Qt安装

这里建议安装Qt6以上的版本,我本机安装的是Qt6.8.2,Qt需要在线下载安装,下载地址
在这里插入图片描述
下载后选择对应的Qt版本进行安装即可。安装Qt的时候注意要选择安装工具 mingw,编译的时候需要用到,这部分就不再赘述。
在这里插入图片描述

4.Cmake安装

在上一步安装Qt的时候可以同时选择安装工具Cmake,当然也可以自行下载Cmake进行安装, 安装完后记得设置环境变量。下载地址

环境配置

以上相关步骤准备好后,接下来是最重要的环境配置,在 Qt Creator 中为 OpenHarmony 创建开发工具包。

打开Qt Creator,点击 编辑->首选项
在这里插入图片描述

配置Qt版本

手动添加Qt版本,这里选择上一步中下载的Qt SDK的路径中的qmake
在这里插入图片描述

配置编译器

前面步骤中下载的鸿蒙SDK的路径中包含有C 和C++ 的编译器,点击“添加”,选择设置相应的路径,如下:
在这里插入图片描述

配置构建套件

切换到“构建套件页面”,点击添加,配置相应的选项,如下:
在这里插入图片描述

环境变量

转到编辑→首选项→环境→系统,然后单击环境部分中的Change…按钮,添加鸿蒙SDK的环境变量。
在这里插入图片描述

以上配置,踩过很多坑,按照Qt Wiki文章中的方法进行配置除了很多问题,可能是因为版本不同导致的吧,有些配置项跟Qt Wiki文章中介绍的不一样,不信邪的可以自行去操作一遍。

开始编译

准备好一切过后,接下来就可以正式开始编译了。
创建一个简单的Qt工程,选择编译方式选择qmake,然后选择我们配置的OHOS Clang套件进行编译:
在这里插入图片描述
编译完成便可得到一个.so动态库文件。
接下来就可以在鸿蒙工程中调用这个动态库文件使用了。

关于如何在DevEco Studio中创建鸿蒙项目并调用动态库的问题,后续再更新~
也可以直接参考Qt Wiki的文章介绍,继续进行。
在这里插入图片描述

参考文章

https://gitee.com/openharmony
https://wiki.qt.io/Qt_for_OpenHarmony/zh
https://gitee.com/openharmony-sig/qt/wikis/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

退休时,按最低基数补缴医疗保险15年大概需要多少钱

在南京退休时,如果医保缴费年限不足(男需满25年/女需满20年),需补缴差额年限。若按最低基数一次性补缴15年医保,费用估算如下(以2024年政策为例): 一、补缴金额计算公式 总补缴费用…

wireshark过滤显示rtmp协议

wireshark中抓包显示的数据报文中,明明可以看到有 rtmp 协议的报文,但是过滤的时候却显示一条都没有 查看选项中的配置,已经没有 RTMP 这个协议了,已经被 RTMPT 替换了,过滤框中输入 rtmpt 过滤即可

《哈希表》K倍区间(解题报告)

文章目录 零、题目描述一、算法概述二、算法思路三、代码实现四、算法解释五、复杂度分析 零、题目描述 题目链接:K倍区间 一、算法概述 计算子数组和能被k整除的子数组数量的算法。通过前缀和与哈希表的结合,高效地统计满足条件的子数组。  需要注…

OpenShift 在 Kubernetes 多出的功能中,哪些开源?

OpenShift 在 Kubernetes 基础上增加的功能中,部分组件是开源的(代码可公开访问),而另一些则是 Red Hat 专有(闭源)。以下是详细分类: 1. 完全开源的功能(代码可查) 这些…

【每天一个知识点】CITE-seq 技术

一、技术背景 单细胞RNA测序(scRNA-seq)自问世以来,极大推动了细胞异质性和组织复杂性的研究。但RNA水平并不能完全代表蛋白质水平,因为蛋白质的表达受转录后调控、翻译效率及蛋白降解等多种因素影响。此外,许多细胞类…

中文Windows系统下程序输出重定向乱码问题解决方案

导言 最近我在用 Rust 开发时,遇到了一个让人头疼的问题:运行 cargo run -- version Cargo.toml > output.txt 将输出重定向到文件后,打开 output.txt 却发现里面全是乱码!我的程序确实是UTF8但是输出的文件却是UTF16LE编码的…

Python管理工具UV

常用 UV 命令 安装 pip install uv 版本相关 uv python list 打印所有uv支持的python版本uv python install cpython-3.12 安装指定的python版本uv run -p 3.12 test.py 用指定的python版本运行python代码uv run -p 3.12 python 进入python执行环境。假如输入的版本是一个本…

论文略读:ASurvey on Intent-aware Recommender Systems

202406 arxiv 推荐系统在许多现代在线服务中发挥着关键作用,例如电子商务或媒体流服务,它们能够为消费者和服务提供商创造巨大的价值。因此,过去几十年来,研究人员提出了大量生成个性化推荐的技术方法。传统算法——从早期的 Gro…

Neo4j 中存储和查询数组数据的完整指南

Neo4j 中存储和查询数组数据的完整指南 图形数据库 Neo4j 不仅擅长处理节点和关系,还提供了强大的数组(Array)存储和操作能力。本文将全面介绍如何在 Neo4j 中高效地使用数组,包括存储、查询、优化以及实际应用场景。 数组在 Neo4j 中的基本使用 数组…

Android 编译和打包image镜像流程

1. 编译命令 source build/envsetup.sh lunch aosp_car_arm64-userdebug make2. 编译流程 source build/envsetup.sh 定义一些函数的环境变量,如 lunchvalidate_current_shell,确认 shell 环境set_global_paths,设置环境变量 ANDROID_GLOB…

MySQL:SQL 慢查询优化的技术指南

1、简述 在 Java 后端开发中,数据库是系统性能瓶颈的高发地带,而 慢 SQL 查询 往往是系统响应迟缓的“罪魁祸首”。本文将全面梳理慢 SQL 的优化思路,并结合 Java 示例进行实战演练。 2、慢查询的常见表现 慢查询通常表现为: 接…

leetcode543-二叉树的直径

leetcode 543 思路 路径长度计算:任意两个节点之间的路径长度,等于它们的最低公共祖先到它们各自的深度之和递归遍历:通过后序遍历(左右根)计算每个节点的左右子树深度,并更新全局最大直径深度与直径的关…

详解main的参数并实现读取文件

在 C 语言中,main函数的参数argc和argv用于接收命令行传入的参数 main 函数的两个参数 int main(int argc, char* argv[]) 假设顾客通过手机 APP 点餐,订单信息会被传递给餐厅的处理系统(也就是你的程序)。 订单信息结构 argc…

c++IO类

概述 c不直接处理输入输出,而是通过定义在标准类库中的类来处理IO。这些类支持从设备读取数据,向设备写入数据的IO操作,设备可以是文件、控制台窗口等。还可以从内存IO。 IO类 iostream: istream,wistreamostream,wo…

springboot的后端处理HTML的页面请求

下面是一个完整的 Spring Boot 后端示例&#xff0c;用于接收 <form> 提交的文件上传请求&#xff08;/article/uploadLifeImage 接口&#xff09;&#xff0c;并将上传的文件保存到本地目录。 ✅ 一、项目结构 upload-demo/ ├── src/ │ └── main/ │ ├…

深入探究 Go 语言中使用 SQLite 数据库

引言 在软件开发中&#xff0c;数据库是管理和存储数据的关键组件。SQLite 作为一款轻量级的嵌入式数据库&#xff0c;因其零配置、高性能和易于集成等特性&#xff0c;成为众多小型项目和嵌入式系统的理想选择。而 Go 语言以其高效、简洁的特点&#xff0c;为操作 SQLite 数据…

Portable Computer Power Adapter

Portable Computer Power Adapter 笔记本电源适配器&#xff0c;将220伏特的交流电转化直流电 现在的适配器真的体积之大&#xff0c;让我无法理解&#xff0c;本来便携计算机为了方便减少体积重量&#xff0c;现在都倒反天罡了。让我无法理解设计师是怎么干出来的。这玩意有2…

Uniapp 网络请求封装专题

目录 一、前言 二、uniapp官方文档 三、举例演示 3.1 使用说明 3.2 Content-Type 3.2.1 ​​基本概念 ​​3.2.2 核心作用 3.2.3 常见 Content-Type 类型及使用场景 1&#xff09;文本类 a&#xff09;text/plain​​​​ b&#xff09;text/html​​ 2&#xf…

2025年渗透测试面试题总结-2025年HW(护网面试) 07(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 07 一、OWASP Top 10 2023核心漏洞 二、XSS窃取Cookie全流程 三、渗透测试五阶段模型…

Seata分布式事务解决框架

Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一个开源的分布式事务解决方案&#xff0c;旨在帮助开发者更容易地在微服务架构中解决分布式事务问题。 你可以把它理解为一个工具箱&#xff0c;专门用来处理微服务之间操作的一致性。…