我有现有的 C 代码及其 header ,我需要从 Rust 调用 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 绑定(bind),正如某些人在评论中提到的那样。
但是,通常最好通过 rust-bindgen
执行此操作,它会自动生成绑定(bind)并包括测试以确保结果的大小、对齐等正确。创建大小不正确的类型非常容易,这不会在编译时给您警告,并可能导致未定义除非您使用 bindgen
为它们生成测试。
关于c - 如何用 Rust 包装现有的 C 函数或如何从 Rust 调用 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708760/