精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OS之Rust開發

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-29 17:19 ? 次閱讀

背景

Rust是一門靜態強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發等優勢。Rust官方也使用Cargo工具來專門為Rust代碼創建工程和構建編譯。 OpenHarmony為了集成C/C++ 代碼和提升編譯速度,使用了GN + Ninja的編譯構建系統。GN的構建語言簡潔易讀,Ninja的匯編級編譯規則直接高效。 為了在OpenHarmony中集成Rust代碼,并最大程度發揮Rust和OpenHarmony中原有C/C++ 代碼的交互性,采用GN作為統一構建工具,即通過GN構建Rust源碼文件(xxx.rs),并增加與C/C++互操作、編譯時lint、測試、IDL轉換、三方庫集成、IDE等功能。同時擴展gn框架,支持接口自動化轉換,最大程度簡化開發。


基本概念

術語描述
CargoCargo是Rust官方使用的構建工具,允許Rust項目聲明其各種依賴項,并確保您始終獲得可重復的構建。
cratecrate是一個獨立的可編譯單元。
LintLint是指出常見編程錯誤、錯誤、樣式錯誤和可疑結構的工具??梢詫Τ绦蜻M行更加廣泛的錯誤分析。

配置規則

OpenHarmony提供了用于Rust代碼編譯構建的各類型GN模板,可以用于編譯Rust可執行文件,動態庫和靜態庫等。各類型模板說明如下:

GN模板功能輸出
ohos_rust_executablerust可執行文件rust可執行文件,不帶后綴
ohos_rust_shared_liaryrust動態庫rust dylib動態庫,默認后綴.dylib.so
ohos_rust_static_liaryrust靜態庫rust rlib靜態庫,默認后綴.rlib
ohos_rust_proc_macrorust proc_macrorust proc_macro庫, 默認后綴.so
ohos_rust_shared_ffirust FFI動態庫rust cdylib動態庫,給C/C++模塊調用,默認后綴.so
ohos_rust_static_ffirust FFI靜態庫rust staticlib庫,給C/C++模塊調用,默認后綴.a
ohos_rust_cargo_crate三方包Cargo craterust三方crate,支持rlib、dylib、bin
ohos_rust_systemtestrust系統測試用例rust可執行系統測試用例,不帶后綴
ohos_rust_unittestrust單元測試用例rust可執行單元測試用例,不帶后綴
ohos_rust_fuzztestrust Fuzz測試用例rust可執行Fuzz測試用例,不帶后綴

配置Rust靜態庫示例

該示例用于測試Rust可執行bin文件和靜態庫rlib文件的編譯,以及可執行文件對靜態庫的依賴,使用模板ohos_rust_executable和ohos_rust_static_library。操作步驟如下:

  1. 創建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. 創建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. 執行編譯得到的可執行文件,運行結果如下:
./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應用系統庫示例

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

// bundle.json 里增加依賴
"components": [
  "hilog"
],
2. 增加調用
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);
    //! 增加調用
    info!(LOG_LABEL, "Fnished enable all keys.");
}
3. 運行測試
// 運行
# ./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其他開源代碼可以混合使用,如rust可以生成C/C庫,給其他C/C應用使用,反之C/C++庫也可以給rust應用調用
![](https://file1.elecfans.com//web2/M00/BF/BF/wKgaomW3baaAS-P1AABB9oinNkM39.webp)

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Rust
    +關注

    關注

    1

    文章

    228

    瀏覽量

    6570
  • OpenHarmony
    +關注

    關注

    25

    文章

    3659

    瀏覽量

    16152
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    188

    瀏覽量

    4368
收藏 人收藏

    評論

    相關推薦

    鴻蒙OS應用程序開發

    這份學習文檔主要是帶領大家在鴻蒙OS上學習開發一個應用程序,主要知識點如下:1、U-Boot引導文件燒寫方式;2、內核鏡像燒寫方式;3、鏡像運行。
    發表于 09-11 14:39

    鴻蒙OS適用的全場景到底什么意思?

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

    鴻蒙os系統是什么意思 鴻蒙os系統有什么作用

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

    鴻蒙 OS 應用開發初體驗

    的操作系統平臺和開發框架。HarmonyOS 的目標是實現跨設備的無縫協同和高性能。 DevEco Studio 對標 Android Studio,開發鴻蒙 OS 應用的 IDE。
    發表于 11-02 19:38

    華為鴻蒙OS又有嚇人的設計 蘋果的Carplay在鴻蒙OS面前真的自嘆不如

    華為鴻蒙OS終于在外界的關注下發布,作為華為自主研發的操作系統,鴻蒙OS還是承載了太多人的期盼。華為鴻蒙
    的頭像 發表于 08-27 10:25 ?8839次閱讀

    華為鴻蒙OS 2.0帶來哪些智慧體驗?

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

    鴻蒙OS 2.0手機開發者Beta版發布會在京舉辦

    三個月前,鴻蒙OS 2.0正式在華為開發者大會2020亮相。12月16日,鴻蒙OS 2.0手機開發
    的頭像 發表于 12-16 09:29 ?1.9w次閱讀

    華為正式推出鴻蒙OS的手機開發者Beta版

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

    鴻蒙OS2.0手機開發者Beta版登場

    12 月 16 日,華為宣布正式推出鴻蒙 OS 的手機開發者 Beta 版,并正式面向個人/企業開發者公測鴻蒙 2.0,
    的頭像 發表于 12-16 14:39 ?2187次閱讀

    華為發布鴻蒙OS Beta版

    昨天華為發布鴻蒙OS Beta版了?鴻蒙系統一直在按照既有步伐前進,現在華為發布鴻蒙OS Beta版,而且一些生態
    的頭像 發表于 12-17 08:41 ?2851次閱讀

    鴻蒙OS與Lite OS的區別是什么

    鴻蒙OS鴻蒙OS面向未來、面向全場景、分布式。在單設備系統能力基礎上,鴻蒙OS提出了基于同一套系
    的頭像 發表于 12-24 12:40 ?4916次閱讀

    華為鴻蒙OS 2.0開發者公測版本大批量向已申請開發者推送

    4 月 27 日,華為鴻蒙 OS 2.0 開發者公測版本大批量向已申請的開發者推送,隨后網上出現大量鴻蒙
    的頭像 發表于 05-12 09:26 ?3029次閱讀

    鴻蒙os怎么升級

    6月2日,華為正式發布了鴻蒙armonyOS 2系統,那么鴻蒙os如何升級?現將鴻蒙os升級方式告知如下。
    的頭像 發表于 06-08 16:26 ?2710次閱讀

    華為開發者大會2021鴻蒙os在哪場

    華為開發者大會2021將在10月22日-24日舉辦,地點為東莞松山湖,鴻蒙os 3.0或將與我們見面,那么華為開發者大會2021鴻蒙
    的頭像 發表于 10-22 15:24 ?1874次閱讀

    [鴻蒙]OpenHarmony4.0的Rust開發

    背景 Rust 是一門靜態強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發等優勢。Rust 官方也使用 Cargo 工具來專門為 Rust 代碼創建工程和構建編譯
    的頭像 發表于 02-26 17:28 ?806次閱讀
    [<b class='flag-5'>鴻蒙</b>]OpenHarmony4.0的<b class='flag-5'>Rust</b><b class='flag-5'>開發</b>