C语言与Rust语言相互调用过程中需要主要的问题
本文主要是用于总结本人在使用Rust重构MUSL中的malloc时遇到的一些C与Rust的映射关系或者需要注意的语法。以下内容大致分为C调用Rust、Rust调用C和其他内容,共分了三个方面进行简单总结。不过以下内容仅仅是个人在尝试用Rust重构malloc时遇到的一些需要注意的非常规语法,以及C与Rust差异化的地方或者某些映射关系。Rust基本语法以及更多细节内容可以参见官方文档 https://doc.rust-lang.org/book/,或者在简单的学习过rust基本语法之后再来看这部分内容。
一、Rust调用C
-
Rust代码的组织架构:使用mod进行封装架构或者引入其他模块,可以参考链接 https://www.runoob.com/rust/rust-project-management.html ,本文重构的malloc代码架构如下,其中main.rs是程序入口,malloc_c.rs内部是malloc的底层实现代码,malloc_impl.rs中声明活定义了部分相关结构体和函数。
-
关于Rust中对应C的数据类型,可以在 crate libc 或者 标准库std::os::raw中可以找到,但是libc中包含的内容比std::os::raw更广泛,所以推荐使用libc。另外,Rust中的usize 对应 C中的 size_t
-
使用关键词use 将变量引入代码作用域,并且可以使用as进行重命名
-
可以使用#[link(name=“r”)]的方式指定引入的C中的函数来自哪一个库,如下,并且还可给函数起别名,参见链接
http