[英]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.