簡體   English   中英

如何用 Rust 包裝現有的 C 函數或如何從 ZF5E265D6607CB7283E858 調用 C 函數?

[英]How to wrap existing C functions with Rust or how to call C functions from Rust?

我有現有的 C 代碼及其 header,我需要從 ZF5E265D607CB702300E 調用 C 代碼。 我嘗試了很多方法並參考了文檔,但我不明白如何將其應用於我的代碼。 我在將 C 函數轉換為 Rust 時遇到了困難。 請幫我舉一些例子,以便我可以輕松理解。

我嘗試使用 Rust 書和其他網站示例中給出的示例,但沒有資源對此提供更多詳細信息。

C_code.h

void ifx_vec_init_r(ifx_Vector_R_t* vector,
                    ifx_Float_t* d,
                    uint32_t length);

void ifx_vec_init_c(ifx_Vector_C_t* vector,
                    ifx_Complex_t* d,
                    uint32_t length);

void ifx_vec_rawview_r(ifx_Vector_R_t* vector,
                       ifx_Float_t* d,
                       uint32_t length,
                       uint32_t stride);

void ifx_vec_sub_r(const ifx_Vector_R_t* v1,
                   const ifx_Vector_R_t* v2,
                   ifx_Vector_R_t* result);

我想調用 Rust 中的所有上述函數,但我無法理解如何啟動或如何更改。 包裝這個 C 代碼需要注意什么? 有哪些可用的方法?

如果您嘗試從 Rust 調用 C 代碼,則需要創建 FFI 綁定,正如某些人在評論中提到的那樣。

但是,通常最好通過rust-bindgen來執行此操作,它會自動生成綁定並包含測試以確保結果大小正確、對齊等。很容易創建大小不正確的類型,這在編譯時不會給你任何警告,並且可能導致未定義的行為,除非你使用bindgen為它們生成測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM