在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS之Rust開(kāi)發(fā)

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-29 17:19 ? 次閱讀

背景

Rust是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開(kāi)發(fā)等優(yōu)勢(shì)。Rust官方也使用Cargo工具來(lái)專(zhuān)門(mén)為Rust代碼創(chuàng)建工程和構(gòu)建編譯。 OpenHarmony為了集成C/C++ 代碼和提升編譯速度,使用了GN + Ninja的編譯構(gòu)建系統(tǒng)。GN的構(gòu)建語(yǔ)言簡(jiǎn)潔易讀,Ninja的匯編級(jí)編譯規(guī)則直接高效。 為了在OpenHarmony中集成Rust代碼,并最大程度發(fā)揮Rust和OpenHarmony中原有C/C++ 代碼的交互性,采用GN作為統(tǒng)一構(gòu)建工具,即通過(guò)GN構(gòu)建Rust源碼文件(xxx.rs),并增加與C/C++互操作、編譯時(shí)lint、測(cè)試、IDL轉(zhuǎn)換、三方庫(kù)集成、IDE等功能。同時(shí)擴(kuò)展gn框架,支持接口自動(dòng)化轉(zhuǎn)換,最大程度簡(jiǎn)化開(kāi)發(fā)。


基本概念

術(shù)語(yǔ)描述
CargoCargo是Rust官方使用的構(gòu)建工具,允許Rust項(xiàng)目聲明其各種依賴(lài)項(xiàng),并確保您始終獲得可重復(fù)的構(gòu)建。
cratecrate是一個(gè)獨(dú)立的可編譯單元。
LintLint是指出常見(jiàn)編程錯(cuò)誤、錯(cuò)誤、樣式錯(cuò)誤和可疑結(jié)構(gòu)的工具。可以對(duì)程序進(jìn)行更加廣泛的錯(cuò)誤分析。

配置規(guī)則

OpenHarmony提供了用于Rust代碼編譯構(gòu)建的各類(lèi)型GN模板,可以用于編譯Rust可執(zhí)行文件,動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)等。各類(lèi)型模板說(shuō)明如下:

GN模板功能輸出
ohos_rust_executablerust可執(zhí)行文件rust可執(zhí)行文件,不帶后綴
ohos_rust_shared_liaryrust動(dòng)態(tài)庫(kù)rust dylib動(dòng)態(tài)庫(kù),默認(rèn)后綴.dylib.so
ohos_rust_static_liaryrust靜態(tài)庫(kù)rust rlib靜態(tài)庫(kù),默認(rèn)后綴.rlib
ohos_rust_proc_macrorust proc_macrorust proc_macro庫(kù), 默認(rèn)后綴.so
ohos_rust_shared_ffirust FFI動(dòng)態(tài)庫(kù)rust cdylib動(dòng)態(tài)庫(kù),給C/C++模塊調(diào)用,默認(rèn)后綴.so
ohos_rust_static_ffirust FFI靜態(tài)庫(kù)rust staticlib庫(kù),給C/C++模塊調(diào)用,默認(rèn)后綴.a
ohos_rust_cargo_crate三方包Cargo craterust三方crate,支持rlib、dylib、bin
ohos_rust_systemtestrust系統(tǒng)測(cè)試用例rust可執(zhí)行系統(tǒng)測(cè)試用例,不帶后綴
ohos_rust_unittestrust單元測(cè)試用例rust可執(zhí)行單元測(cè)試用例,不帶后綴
ohos_rust_fuzztestrust Fuzz測(cè)試用例rust可執(zhí)行Fuzz測(cè)試用例,不帶后綴

配置Rust靜態(tài)庫(kù)示例

該示例用于測(cè)試Rust可執(zhí)行bin文件和靜態(tài)庫(kù)rlib文件的編譯,以及可執(zhí)行文件對(duì)靜態(tài)庫(kù)的依賴(lài),使用模板ohos_rust_executable和ohos_rust_static_library。操作步驟如下:

  1. 創(chuàng)建build/rust/tests/test_rlib_crate/src/simple_printer.rs,如下所示:
    //! simple_printer
    
    /// struct RustLogMessage
    
    pub struct RustLogMessage {
        /// i32: id
        pub id: i32,
        /// String: msg
        pub msg: String,
    }
    
    /// function rust_log_rlib
    pub fn rust_log_rlib(msg: RustLogMessage) {
        println!("id:{} message:{:?}", msg.id, msg.msg)
    }
    
  2. 創(chuàng)建build/rust/tests/test_rlib_crate/src/main.rs,如下所示:
    //! rlib_crate example for Rust.
    
    extern crate simple_printer_rlib;
    
    use simple_printer_rlib::rust_log_rlib;
    use simple_printer_rlib::RustLogMessage;
    
    fn main() {
        let msg: RustLogMessage = RustLogMessage {
            id: 0,
            msg: "string in rlib crate".to_string(),
        };
        rust_log_rlib(msg);
    }
    
  3. 配置gn腳本build/rust/tests/test_rlib_crate/BUILD.gn,如下所示:
```json
import("http://build/ohos.gni")

ohos_rust_executable("test_rlib_crate") {
  sources = [ "src/main.rs" ]
  deps = [ ":simple_printer_rlib" ]
}

ohos_rust_static_library("simple_printer_rlib") {
  sources = [ "src/simple_printer.rs" ]
  crate_name = "simple_printer_rlib"
  crate_type = "rlib"
  features = [ "std" ]
}
4. 執(zhí)行編譯得到的可執(zhí)行文件,運(yùn)行結(jié)果如下:
./build.sh --product-name rk3568 --build-target build/rust/tests:tests  --no-prebuilt-sdk
hdc_std.exe shell mount -o rw,remount /
hdc_std.exe shell file send test_dylib_crate /data/local/tmp
hdc_std.exe file send libsimple_printer_dylib.dylib.so /system/lib

hdc_std.exe shell
# cd /data/local/tmp
# chmod +x test_dylib_crate
# ./test_dylib_crate
id:0 message:"string in rlib crate"
#### 配置Rust應(yīng)用系統(tǒng)庫(kù)示例

1. 增加依賴(lài)
// GN 里增加依賴(lài)
ohos_rust_executable("test_dylib_crate") {
  sources = [ "src/main.rs" ]
  deps = [ ":simple_printer_dylib" ]
  # 增加外部依賴(lài)
  external_deps = [ "hilog:hilog_rust" ]
}

// bundle.json 里增加依賴(lài)
"components": [
  "hilog"
],
2. 增加調(diào)用
extern crate simple_printer_dylib;

use simple_printer_dylib::rust_log_dylib;
use simple_printer_dylib::RustLogMessage;
//! 增加引用
use std::ffi::{ c_char, CString };
use hilog_rust::{hilog, info, HiLogLabel, LogType};

const LOG_LABEL: HiLogLabel = HiLogLabel {
    log_type: LogType::LogCore,
    domain: 0xD002220, 
    tag: "TEST_RUST",
};

fn main() {
    let msg: RustLogMessage = RustLogMessage {
        id: 0,
        msg: "string in rlib crate".to_string(),
    };
    rust_log_dylib(msg);
    //! 增加調(diào)用
    info!(LOG_LABEL, "Fnished enable all keys.");
}
3. 運(yùn)行測(cè)試
// 運(yùn)行
# ./test_dylib_crate
id:0 message:"string in rlib crate"

// 查看hilog
# hilog | grep Fnished
08-17 05:14:18.121 29293 29293 I C02220/TEST_RUST: Fnished enable all keys.
---

注意:rust和openharmony其他開(kāi)源代碼可以混合使用,如rust可以生成C/C庫(kù),給其他C/C應(yīng)用使用,反之C/C++庫(kù)也可以給rust應(yīng)用調(diào)用
![](https://file1.elecfans.com//web2/M00/BF/BF/wKgaomW3baaAS-P1AABB9oinNkM39.webp)

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    233

    瀏覽量

    6975
  • OpenHarmony
    +關(guān)注

    關(guān)注

    28

    文章

    3836

    瀏覽量

    18220
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    191

    瀏覽量

    4894
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙OS應(yīng)用程序開(kāi)發(fā)

    這份學(xué)習(xí)文檔主要是帶領(lǐng)大家在鴻蒙OS上學(xué)習(xí)開(kāi)發(fā)一個(gè)應(yīng)用程序,主要知識(shí)點(diǎn)如下:1、U-Boot引導(dǎo)文件燒寫(xiě)方式;2、內(nèi)核鏡像燒寫(xiě)方式;3、鏡像運(yùn)行。
    發(fā)表于 09-11 14:39

    鴻蒙OS適用的全場(chǎng)景到底什么意思?

    鴻蒙系統(tǒng)(HarmonyOS),第一款基于微內(nèi)核的全場(chǎng)景分布式OS,是華為自主研發(fā)的操作系統(tǒng)。華為在開(kāi)發(fā)者大會(huì)HDC.2019上正式發(fā)布了鴻蒙系統(tǒng),該系統(tǒng)將率先部署在智慧屏、車(chē)載終端、
    發(fā)表于 09-25 09:25

    鴻蒙os系統(tǒng)是什么意思 鴻蒙os系統(tǒng)有什么作用

    大家都很熟悉華為,那么華為近年新研發(fā)出來(lái)的鴻蒙os系統(tǒng)是什么意思?下面與大家分享華為鴻蒙os系統(tǒng)是什么意思的教程。鴻蒙
    發(fā)表于 12-17 11:34

    鴻蒙 OS 應(yīng)用開(kāi)發(fā)初體驗(yàn)

    的操作系統(tǒng)平臺(tái)和開(kāi)發(fā)框架。HarmonyOS 的目標(biāo)是實(shí)現(xiàn)跨設(shè)備的無(wú)縫協(xié)同和高性能。 DevEco Studio 對(duì)標(biāo) Android Studio,開(kāi)發(fā)鴻蒙 OS 應(yīng)用的 IDE。
    發(fā)表于 11-02 19:38

    鴻蒙os支持機(jī)型有哪些 鴻蒙os支持機(jī)型名單

    鴻蒙os支持OTA在線升級(jí)機(jī)型名單
    的頭像 發(fā)表于 06-03 15:06 ?28w次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>os</b>支持機(jī)型有哪些 <b class='flag-5'>鴻蒙</b><b class='flag-5'>os</b>支持機(jī)型名單

    華為鴻蒙OS 2.0帶來(lái)哪些智慧體驗(yàn)?

    華為已經(jīng)定于12月16日在北京發(fā)布鴻蒙OS 2.0手機(jī)開(kāi)發(fā)者Beta版本。這不僅是手機(jī)鴻蒙OS的首次亮相,同時(shí)也意味著手機(jī)
    的頭像 發(fā)表于 12-15 15:10 ?2257次閱讀

    鴻蒙OS 2.0手機(jī)開(kāi)發(fā)者Beta版發(fā)布會(huì)在京舉辦

    三個(gè)月前,鴻蒙OS 2.0正式在華為開(kāi)發(fā)者大會(huì)2020亮相。12月16日,鴻蒙OS 2.0手機(jī)開(kāi)發(fā)
    的頭像 發(fā)表于 12-16 09:29 ?1.9w次閱讀

    華為正式推出鴻蒙OS的手機(jī)開(kāi)發(fā)者Beta版

    12月16日上午消息,華為今日宣布正式推出鴻蒙OS的手機(jī)開(kāi)發(fā)者Beta版,華為消費(fèi)者業(yè)務(wù)軟件部總裁王成錄表示,今年已有美的、九陽(yáng)、老板電器、海雀科技搭載鴻蒙
    的頭像 發(fā)表于 12-16 10:37 ?2804次閱讀

    鴻蒙OS2.0手機(jī)開(kāi)發(fā)者Beta版登場(chǎng)

    12 月 16 日,華為宣布正式推出鴻蒙 OS 的手機(jī)開(kāi)發(fā)者 Beta 版,并正式面向個(gè)人/企業(yè)開(kāi)發(fā)者公測(cè)鴻蒙 2.0,
    的頭像 發(fā)表于 12-16 14:39 ?2413次閱讀

    華為發(fā)布鴻蒙OS Beta版

    昨天華為發(fā)布鴻蒙OS Beta版了?鴻蒙系統(tǒng)一直在按照既有步伐前進(jìn),現(xiàn)在華為發(fā)布鴻蒙OS Beta版,而且一些生態(tài)
    的頭像 發(fā)表于 12-17 08:41 ?3117次閱讀

    鴻蒙OS與Lite OS的區(qū)別是什么

    鴻蒙OS鴻蒙OS面向未來(lái)、面向全場(chǎng)景、分布式。在單設(shè)備系統(tǒng)能力基礎(chǔ)上,鴻蒙OS提出了基于同一套系
    的頭像 發(fā)表于 12-24 12:40 ?5451次閱讀

    華為鴻蒙OS 2.0開(kāi)發(fā)者公測(cè)版本大批量向已申請(qǐng)開(kāi)發(fā)者推送

    4 月 27 日,華為鴻蒙 OS 2.0 開(kāi)發(fā)者公測(cè)版本大批量向已申請(qǐng)的開(kāi)發(fā)者推送,隨后網(wǎng)上出現(xiàn)大量鴻蒙
    的頭像 發(fā)表于 05-12 09:26 ?3358次閱讀

    鴻蒙os怎么升級(jí)

    6月2日,華為正式發(fā)布了鴻蒙armonyOS 2系統(tǒng),那么鴻蒙os如何升級(jí)?現(xiàn)將鴻蒙os升級(jí)方式告知如下。
    的頭像 發(fā)表于 06-08 16:26 ?3082次閱讀

    華為開(kāi)發(fā)者大會(huì)2021鴻蒙os在哪場(chǎng)

    華為開(kāi)發(fā)者大會(huì)2021將在10月22日-24日舉辦,地點(diǎn)為東莞松山湖,鴻蒙os 3.0或?qū)⑴c我們見(jiàn)面,那么華為開(kāi)發(fā)者大會(huì)2021鴻蒙
    的頭像 發(fā)表于 10-22 15:24 ?2110次閱讀

    [鴻蒙]OpenHarmony4.0的Rust開(kāi)發(fā)

    背景 Rust 是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開(kāi)發(fā)等優(yōu)勢(shì)。Rust 官方也使用 Cargo 工具來(lái)專(zhuān)門(mén)為 Rust 代碼創(chuàng)建工程和構(gòu)建編譯
    的頭像 發(fā)表于 02-26 17:28 ?1235次閱讀
    [<b class='flag-5'>鴻蒙</b>]OpenHarmony4.0的<b class='flag-5'>Rust</b><b class='flag-5'>開(kāi)發(fā)</b>
    主站蜘蛛池模板: 午夜欧美精品久久久久久久 | 丁香伊人五月综合激激激 | 国模绪 | 性殴美高清视频 | 欧美一级日韩一级亚洲一级 | 丁香婷婷啪啪 | 夜夜操操 | 成人欧美一区二区三区黑人3p | 国产精品高清免费网站 | 日韩一级片在线免费观看 | 国产三级久久久精品三级 | 上一篇26p国模 | 都市激情综合网 | 麒麟色欧美影院在线播放 | 亚洲成年人在线 | 日日日干干干 | 国产牛仔裤系列在线观看 | 男人的天堂色偷偷之色偷偷 | 欧美女同在线 | 性夜影院爽黄e爽在线观看 羞羞色院91精品网站 | 欧美成人性色生活片天天看 | 日本三浦理惠子中文字幕 | 中文字幕一区二区三区在线播放 | 国产免费高清在线精品一区 | 大蕉久久伊人中文字幕 | 91成人免费视频 | 狠狠五月婷婷 | 午夜高清视频 | 黄色午夜剧场 | 兔费看全黄三级 | 午夜欧美成人久久久久久 | 亚洲人成网站在线在线 | 天天干天天拍天天操 | 伊人色综合久久天天爱 | 成人国产亚洲欧美成人综合网 | 久操中文 | 精品女视频在线观看免费 | 黄色免费三级 | 国产在线欧美精品卡通动漫 | 欧美一级视频在线高清观看 | 六月婷婷在线观看 |