Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Rust包装现有的C函数,或者如何从Rust调用C函数?_C_Rust_Ffi - Fatal编程技术网

如何用Rust包装现有的C函数,或者如何从Rust调用C函数?

如何用Rust包装现有的C函数,或者如何从Rust调用C函数?,c,rust,ffi,C,Rust,Ffi,我有现有的C代码和它的头,我需要从Rust调用C代码。我尝试了很多方法并引用了文档,但我不知道如何将其应用到我的代码中。我面临着将C函数转换为Rust的困难。请帮我举一些例子,以便我能容易地理解 我试着使用铁锈书中给出的例子和其他网站上的例子,但没有任何资源有更多关于这方面的细节 C_代码.h void ifx_vec_init_r(ifx_Vector_R_t* vector, ifx_Float_t* d, ui

我有现有的C代码和它的头,我需要从Rust调用C代码。我尝试了很多方法并引用了文档,但我不知道如何将其应用到我的代码中。我面临着将C函数转换为Rust的困难。请帮我举一些例子,以便我能容易地理解

我试着使用铁锈书中给出的例子和其他网站上的例子,但没有任何资源有更多关于这方面的细节

C_代码.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绑定,正如一些人在评论中提到的那样


但是,通常最好通过自动生成绑定并包括测试来确保结果大小正确、对齐等。创建大小不正确的类型非常容易,这在编译时不会给您任何警告,并且可能会导致未定义的行为,除非您使用
bindgen

为它们生成测试。是的,我做了,但没有详细的资源可用。@ganesh。我不知道你是怎么错过的。看起来你的问题可以用;如果没有,请回答您的问题以解释差异。否则,我们可以将这个问题标记为已回答。Rust Bindgen在Rust stable版本中是否真的工作顺利?因为我在所有步骤中都会遇到错误。晚上版怎么样?哪一个是首选?它在过去对我有效,具有稳定的锈迹。您遇到了什么错误?错误:无法为“bindgen-tutorial-bzip2-sys v0.1.0(C:\Users\Hegde\Desktop\bindgen-tutorial-bzip2-sys)”运行自定义生成命令stderr wrapper.h:1:10:致命错误:“bzlib.h”文件找不到wrapper.h:1:10:致命错误:“bzlib.h”文件找不到,错误:true确保您的include路径中有bzip库,如果您需要进一步帮助,我将打开另一个问题。希望此帮助谢谢@Coder256的帮助,我曾尝试添加库,但错误保持不变,今天我再次从bindgen官方网站克隆了它,但它没有改变任何东西。如果可能,请提出问题。