OpenHarmony4.1上初体验rust

news2025/1/9 20:37:29

OpenHarmony4.1上初体验rust

  • 前言
  • 一、准备工作
  • 二、初步调研
  • 三、初步尝试
    • 运行测试demo
  • 四、尝试构建自己的hello world
  • 五、与C、C++的交互
  • 总结


前言

由于后续可能要做rust基于OpenHarmony的开发工作,于是先开始一些调研性的工作,rust了解的内容可以参考该文章:
ubuntu20.04搭建RUST开发环境并与C语言交互


一、准备工作

OpenHarnmony4.1版本,有设备的话可以用riscv的荔枝派,rk3568的dayu系列开发板,没有设备的话可以用QEMU。
本文以下的尝试均基于riscv的OpenHarnmony4.1版本在荔枝派上进行。

整编OH版本并烧录至荔枝派设备,确保可以正常启动桌面。

二、初步调研

rust相关的目录主要有以下几个:

  1. build\rust:有一些rust相关的测试demo,比如和c、c++代码进行互调的测试等,可以使用以下命令进行编译,其中build-target可以使用build\rust\tests\BUILD.gn中的group。

./build.sh --product-name rvbook --no-prebuilt-sdk --build-target ohos_rust_xxxtest_tests
./build.sh --product-name rvbook --no-prebuilt-sdk --build-target cargo_crate_test
./build.sh --product-name rvbook --no-prebuilt-sdk --build-target cxx_test_host_and_target

  1. third_party\rust\crates 里面东西很多,需要慢慢看。
  2. build\templates\rust
  3. prebuilts\rustc-riscv
  4. 其他的发现以后再进行补充。

三、初步尝试

运行测试demo

使用上面的编译命令将相关的demo编译出后通过HDC命令将相关的进程和库文件拷贝至荔枝派设备的“/data”目录。
其中编译ohos_rust_xxxtest_tests目标时会有如下报错:
在这里插入图片描述
应该是编译器限制的比较严格,不能有warning导致,如下修改代码即可
build\rust\tests\test_proc_macro_crate\test_derive_macro\src\main.rs

 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

extern crate derive_macro;
use derive_macro::AnswerFn;

#[derive(AnswerFn)]
#[allow(dead_code)] //新增此行
struct Struct;

fn main() {
    assert_eq!(42, answer());
}

生成的相关二进制位于out/build/build_framework/
在这里插入图片描述
在荔枝派上./运行,除了一个需要设置一下环境变量,其他都可以正常跑出结果。

export LD_LIBRARY_PATH=/data/build_framework

四、尝试构建自己的hello world

就在build/rust目录下开始编写自己的hello world。

  1. 新建目录,目录下新增main.rs,build.rs,BUILD.gn。
    main.rs就只有一个println!,build.rs从test的其他demo直接拿过来用,BUILD.gn也可以仿照其他的demo。
  2. 修改build目录下的bundle.json,增加新的build-target。运行编译命令(其中rust_liusai为我新添加到bundle.json的group):

./build.sh --product-name rvbook --no-prebuilt-sdk --build-target rust_liusai

在这里插入图片描述
原因是"-D missing-docs",找一下解决方法。

把编译命令中的"-D missing-docs"直接删除,然后cd到目录out/rvbook编译,成功得到进程文件。HDC到设备上./运行:
在这里插入图片描述
成功。

五、与C、C++的交互

参考OH自带的文档
third_party\rust\crates\cxx\readme_zh.md
third_party\rust\crates\bindgen\readme_zh.md
docs\zh-cn\device-dev\subsystems\subsys-build-rust-compilation.md
明天搞出来以后进行补充。

总结

需要了解OopenHarmony,HDC,ninja编译体系构建。
熟悉rust语言,rust编译。

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

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

相关文章

雷达气象学(6)——径向速度图分析

文章目录 6.1 速度场分析基础6.1.1 速度图分析的基本方法6.1.2 练习:整层为均匀西风6.1.3 练习:风向随高度顺转 6.2 水平均匀风场的典型图像6.3 典型天气系统的判别6.3.1 锋面(切变线)系统6.3.1.1 冷锋(冷式切变线&…

苹果是如何成为一家以产品力驱动的公司

最近在看苹果的HIG(开发者指南)文档,深刻的体会到设计/产品能力对于用户的重要性,为什么苹果会有“设计可以改变一切”“产品即营销”这样的理念,而苹果也的的确确成为了少数以产品驱动的科技公司。 文档本身有六部分…

【数据结构详解】——归并排序(动图详解)

目录 🕒 1. 归并排序🕘 1.1 递归实现🕘 1.2 非递归实现 🕒 1. 归并排序 💡 算法思想:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子…

蓝牙资讯|AirPods Pro 2推送最新开发者版固件,支持点头摇头控制Siri

苹果面向开发者推送了 AirPods Pro 2 的最新固件更新,版本号为 7A5266c。这并非一次常规更新是为即将在秋季发布的 iOS 18 系统做准备。 根据官方信息,新固件将为 AirPods Pro 2 引入一系列新功能,包括点头或摇头控制 Siri、增强嘈杂环境下…

Visual Studio Code 使用Git详细教程

再集成之前请确保已经安装Visual Studio Code 和Git,并且可以找到Git文件地址。如果找不到可以在系统环境变量里面看一眼之前的配置-需要找到Git下面的cmd目录,一会配置使用。 打开 Visual Studio Code找到设置根据图片指引 1.找到左下角设置按钮 2.展开…

支付宝沙箱模拟支付的实现

目录 1.登录支付宝开发平台 2.使用沙箱模拟支付 3.后端代码 4.前端代码 现在几乎所有应用或者网站都需要接入支付接口,因为一个产品最终目的还是要赚钱,所以我们今天就使用支付宝提供的模拟支付的接口来实现这个功能。 1.登录支付宝开发平台 支付宝…

deepin V23前瞻丨deepin V23与飞腾腾锐D3000完成适配,持续丰富deepin操作系统硬件生态

查看原文 近日,自主核心芯片研发飞腾公司宣布与deepin V23完成适配,包含飞腾新一代桌面CPU飞腾腾锐D3000、FT-2000/64、桌面芯片飞腾腾锐D2000等多款产品,为用户带来更智能、安全、稳定的使用体验。 飞腾腾锐D3000集成8个飞腾自主研发的新一…

微服务-分布式事务-seata

1. 事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作,这些操作作为一个整体一起向系统提交,要么执行,要么都不执行 1.1 ACID事务的特点 原子性:针对同一事务,要么都完成,要么都不完成 一致…

实例讲解Jmeter参数化的四种方式

JMeter的四种参数化方式包括: 1.用户参数(UserParameters):适用于参数取值范围很小的时候使用 2.函数助手(FunctionHelper):可作为其他参数化方式的补充项,如:随机数生成…

使用RestHighLevelClient进行Elasticsearch Function Score查询

简介 Function Score查询在Elasticsearch中是一个强大的工具,它允许我们根据一个或多个函数来调整查询结果的相关性得分。这使得我们可以基于某些条件对搜索结果进行更精细的控制。本文将介绍如何在Java应用程序中使用Elasticsearch的RestHighLevelClient执行Funct…

城市夜景车水马龙视频素材去哪里找?

在这个数字化与视觉化日益融合的时代,城市夜景已成为吸引观众眼球的热门视频主题。无论是个人爱好者还是企业,都致力于通过展示繁华都市的夜晚来俘获观众的心。今天,我将为您介绍几个优秀的视频素材网站,帮助您获取高质量的城市夜…

在小红书用AI做搞笑日常图文号,单号软广赚3000+!

今天,当我在小红书上刷案例时,突然眼前一亮,发现了一些以沙雕日常为主题的手绘插画图文账号。这些账号的笔记点赞量高得惊人,每篇都有上千的点赞,而且植入的软广告报价也是高得吓人。 像上图这个账号,它只发…

MetaLLM大语言模型文本生成算法分析报告

一、算法安全与监测 算法安全 信息内容安全方面,MetaLLM算法必须确保生成的文本不包含有害信息,如不当言论、歧视性内容等。这需要在训练数据中进行严格的筛选,并在模型设计时加入过滤机制。信息源安全则关注于训练数据的质量和多样性&…

【sgCreateAPIFunction】自定义小工具:敏捷开发→自动化生成API接口方法代码片段脚本(接口方法代码生成工具)

sgCreateAPIFunction源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/141159084 查看使用说明 --><div :class"$options.name"><div class"sg-head">接口方法生成工具<el-dropdown:show-timeou…

vue2+OpenLayers 地图上添加渐变色(6)

渐变还有些问题需要晚上 引入 import sxs from "/views/json/sx.json"; import sx from "/views/json/sx1.json"; import GeoJSON from "ol/format/GeoJSON"; import Polygon, { fromExtent } from "ol/geom/Polygon"; import Linear…

文件上传漏洞-防御

防御文件上传的方法各种各样 1、限制文件上传的类型&#xff08;不让上传php等脚本类文件、只允许上传图片&#xff09; 2、给上传的文件重命名&#xff0c;让攻击者找不到自己传的文件在哪 3、限制文件上传大小 4、压缩上传文件 5、把上传的文件存储到文件服务器或者OSS平…

uniapp获取头像文件(二进制文件显示图片)

一、描述 由于在获取头像文件过程中&#xff0c;传递参数之后&#xff0c;请求成功了&#xff0c;但是后端给我返回了一串二进制数据流&#xff0c;傻傻的我&#xff0c;以为是乱码&#xff0c;跑去问后端大哥&#xff0c;人家跟我说这不是二进制吗&#xff0c;突然就觉得自己傻…

引领端侧多模态新时代:MiniCPM-V 2.6重磅登场

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;每一次技术的进步都伴随着参数规模的提升和计算力的突破。然而&#xff0c;面壁智能公司最新推出的MiniCPM-V 2.6端侧多模态模型&#xff0c;却以相对“小巧”的8B参数量级&#xff0c;打破了传统思维&#xff0c;实现了端…

初学者入门的可视化超级色彩公式

色彩不仅是视觉元素&#xff0c;也是数据表达的重要工具。在临床数据的可视化过程中&#xff0c;合理的色彩搭配能帮助观众迅速理解数据背后的意义。例如&#xff0c;高危状态的患者可能用红色表示&#xff0c;而健康状态用绿色表示。不同色彩之间的对比度和相对位置将决定数据…

蓝牙耳机怎么连接手机?苹果用户关注这3个方法

在这个无线连接日益普及的时代&#xff0c;蓝牙耳机已成为我们日常生活中不可或缺的伴侣。然而&#xff0c;对于初次使用或遇到连接问题的用户来说&#xff0c;如何解决蓝牙耳机怎么连接手机的问题可能会有些许困惑。本文将为您详细介绍3种简单易行的方法&#xff0c;帮助您轻松…