app营销型网站的特点,中山论坛建站模板,爱空间装修公司属于什么档次,服务推广网站rust调用C端的库函数#xff0c;有很多方法。今天介绍通过cc库#xff0c;通过build生成脚本的方式#xff0c;实现rust调用c端库函数。
1、相关准备#xff1a; 在ffi目录下#xff0c;创建了c_part和rust_ffi文件夹。 c_part下放了ctools.c文件#xff0c;里面有一些…rust调用C端的库函数有很多方法。今天介绍通过cc库通过build生成脚本的方式实现rust调用c端库函数。
1、相关准备 在ffi目录下创建了c_part和rust_ffi文件夹。 c_part下放了ctools.c文件里面有一些库函数需要让rust调用。当然ctools.c也可以放在其它地方只需要后面的地址一致即可以。
2、cargo toml部分 这里需要注意
buildbuild.rs
libc 0.2
cc 0.2有一些依赖和说明。 3、ctools.c
// ctools.c 代码
int add(int i,int j){return ij;
}
int two_times(int input){return input*2;
}
int three_times(int input){return input*3;
}
4、build.rs文件
extern crate cc;fn main(){cc::Build::new().file(../c_part/ctools.c).compile(libctools.a);}需要注意的是file中ctool.c文件地址一定要准确否则会有如下报错信息但没有明示说路径不对找不到文件之类。报错可能如下(下面标红处路径是故意写错路径的情况) 5、rust端main.rs
extern crate libc;
use libc::c_int;
extern C {fn add(i:c_int,j:c_int) -c_int;fn two_times(input:c_int) -c_int;fn three_times(input:c_int) -c_int;
}fn main() {println!(Hi guys, welcome rust ffi !);let twotimes_value:i32 unsafe{two_times(-8)};println!(twotimes_value : {:?},twotimes_value);let add_value unsafe{add(2,3)};println!(add_value : {:?},add_value);let threetimes_value unsafe{three_times(3)};println!(threetimes_value: {:?},threetimes_value);
}引入libc库以及c_int类型。
6、cargo build 如果配置正确在rust_ffi目录下build.rs所在目录运行cargo build可见build成功。
7、cargo run
相关结果表明rust端已经正确调用了ctools.c中几个库函数。 注意的是因为已经是ffi调用均需要加unsafe。