使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
WebAssembly 簡介
WebAssembly 是一種二進制指令格式,旨在成為一種低級虛擬機,可以在 Web 瀏覽器中以接近本機的速度運行代碼。它不特定于網(wǎng)絡,也可以在其他平臺上運行。WebAssembly 代碼可以從各種編程語言編譯而來,例如 C、C++、Rust、C# 等。 Wasmer 是一個輕量級且快速的 WebAssembly 運行時,可以在各種平臺上運行 WebAssembly 模塊,包括 Windows、Linux 和 macOS。Wasmer 支持多種編程語言,包括 C、C++、Rust 等。
使用 C++ 創(chuàng)建 WebAssembly 庫
首先,我們將使用 C++ 創(chuàng)建一個簡單的“加法”函數(shù),它將兩個整數(shù)作為輸入并返回它們的和。
// add.cpp extern "C" { int add ( int a, int b) { return a + b; } }
在這段代碼中,我們將使用 Rust 中的 add 函數(shù)。使用外部“C”是為了使函數(shù)“add”不被編譯器破壞。我們將不得不在我們的 Rust 代碼中使用相同的名稱。以下是將代碼編譯為 WebAssembly 的更新命令:
wasmc++ add.cpp -o add.wasm
完成執(zhí)行后,您應該能夠看到文件 add.wasm。我們會將這個 Web 程序集加載到我們的 Rust 項目中。
在 Rust 中使用它
讓我們使用創(chuàng)建一個簡單的 Rust 項目
cargo new wasmer-consume
在 Cargo.toml 中添加如下依賴
wasmer = “3.1.1” wasmer-wasi = “3.1.1”
替換main.rs中的以下代碼
use wasmer::{Instance, Module, Store, Value, Function}; use wasmer_wasi::{WasiState, WasiEnv, generate_import_object_from_env, WasiFunctionEnv}; fn main() -> Result<(), Box
當您運行cargo run命令時,如果一切順利,您應該會看到以下內(nèi)容:
.
我們可以看到該函數(shù)在控制臺應用程序中可用?,F(xiàn)在讓我們看看如何在瀏覽器中使用它。
結(jié)論
盡管這個例子很簡單,但從概念上講,它為“一次編寫,到處運行”開辟了新的含義。Webassembly 作為一項技術(shù)仍處于初期階段。它幫助我們彌合編程語言和平臺之間的鴻溝。
責任編輯:彭菁
-
模塊
+關(guān)注
關(guān)注
7文章
2788瀏覽量
50451 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75359 -
虛擬機
+關(guān)注
關(guān)注
1文章
966瀏覽量
29382
原文標題:【Rust日報】2023-06-07 使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何在Rust中使用Memcached
FX2 CY7C68013A如何在C++環(huán)境中使用LoadEEPROM函數(shù)?
在Rust代碼中加載靜態(tài)庫時,出現(xiàn)錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?
如何在C++代碼中使用C頭文件
Chrome團隊將測試驗證Rust與C++的互操作性
微軟開始嘗試使用Rust代替C/C++,介紹這些運用Rust的產(chǎn)品
C++ STM32 編程 005 用c++編寫STM32程序的準備

Rust語言助力Android內(nèi)存安全漏洞大幅減少
Chromium正式開始支持Rust
Rust和C++哪個更好入門
C和C++編寫環(huán)境下LabVIEW如何調(diào)用動態(tài)庫?

評論