使用 C++ 編寫通用庫(kù)并在 Rust 中使用它 (WASI)
WebAssembly 簡(jiǎn)介
WebAssembly 是一種二進(jìn)制指令格式,旨在成為一種低級(jí)虛擬機(jī),可以在 Web 瀏覽器中以接近本機(jī)的速度運(yùn)行代碼。它不特定于網(wǎng)絡(luò),也可以在其他平臺(tái)上運(yùn)行。WebAssembly 代碼可以從各種編程語言編譯而來,例如 C、C++、Rust、C# 等。 Wasmer 是一個(gè)輕量級(jí)且快速的 WebAssembly 運(yùn)行時(shí),可以在各種平臺(tái)上運(yùn)行 WebAssembly 模塊,包括 Windows、Linux 和 macOS。Wasmer 支持多種編程語言,包括 C、C++、Rust 等。
使用 C++ 創(chuàng)建 WebAssembly 庫(kù)
首先,我們將使用 C++ 創(chuàng)建一個(gè)簡(jiǎn)單的“加法”函數(shù),它將兩個(gè)整數(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í)行后,您應(yīng)該能夠看到文件 add.wasm。我們會(huì)將這個(gè) Web 程序集加載到我們的 Rust 項(xiàng)目中。
在 Rust 中使用它
讓我們使用創(chuàng)建一個(gè)簡(jiǎn)單的 Rust 項(xiàng)目
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
當(dāng)您運(yùn)行cargo run命令時(shí),如果一切順利,您應(yīng)該會(huì)看到以下內(nèi)容:
.
我們可以看到該函數(shù)在控制臺(tái)應(yīng)用程序中可用。現(xiàn)在讓我們看看如何在瀏覽器中使用它。
結(jié)論
盡管這個(gè)例子很簡(jiǎn)單,但從概念上講,它為“一次編寫,到處運(yùn)行”開辟了新的含義。Webassembly 作為一項(xiàng)技術(shù)仍處于初期階段。它幫助我們彌合編程語言和平臺(tái)之間的鴻溝。
責(zé)任編輯:彭菁
-
模塊
+關(guān)注
關(guān)注
7文章
2837瀏覽量
53274 -
C++
+關(guān)注
關(guān)注
22文章
2123瀏覽量
77102 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
972瀏覽量
30457
原文標(biāo)題:【Rust日?qǐng)?bào)】2023-06-07 使用 C++ 編寫通用庫(kù)并在 Rust 中使用它 (WASI)
文章出處:【微信號(hào):Rust語言中文社區(qū),微信公眾號(hào):Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在Rust中使用Memcached
FX2 CY7C68013A如何在C++環(huán)境中使用LoadEEPROM函數(shù)?
在Rust代碼中加載靜態(tài)庫(kù)時(shí),出現(xiàn)錯(cuò)誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?
c++標(biāo)準(zhǔn)庫(kù)手冊(cè)
如何在C++代碼中使用C頭文件
Chrome團(tuán)隊(duì)將測(cè)試驗(yàn)證Rust與C++的互操作性
微軟開始嘗試使用Rust代替C/C++,介紹這些運(yùn)用Rust的產(chǎn)品
C++ STM32 編程 005 用c++編寫STM32程序的準(zhǔn)備
Rust語言助力Android內(nèi)存安全漏洞大幅減少
Chromium正式開始支持Rust
Rust和C++哪個(gè)更好入門
C和C++編寫環(huán)境下LabVIEW如何調(diào)用動(dòng)態(tài)庫(kù)?
使用C++編寫通用庫(kù)并在 Rust 中使用它 (WASI)
評(píng)論