Signed-off-by: fangting <fangting12@huawei.com>
3.6 KiB
libc - 提供 C 标准库的rust侧FFI
引入背景
libc提供了所有必要的定义,以便在Rust轻松与C
代码(或 "类C "代码)在Rust支持的平台上的调用。这包括
包括类型定义(如c_int),常量(如EINVAL)以及
函数(例如:`malloc')。
libc将各类平台中C库的类型、函数和常量导出在根目录下,所以所有项目都可以作为`libc::foo'访问这些API。 所有导出的API的类型和值都与 libc 编译的平台一致。
关于这个库的设计,更详细的信息可以在这里找到 associated RFC.
用法指导
使用Openharmony编译框架
在你的"BUILD.gn"中使用deps字段添加对libc crate的依赖,例如:
ohos_rust_shared_library("foo") {
source = [ "src/lib.rs" ]
deps = [ "//third_party/rust/crates/libc:lib" ]
}
使用Cargo
在你的 "Cargo.toml "中添加以下内容:
[dependencies]
libc = "0.2"
特点
-
std:默认情况下,libc链接到标准库。禁用这个 来消除这一依赖关系,并能够在#![no_std]中使用libc。 crates。 -
extra_traits:libc中实现的所有结构'都是Copy和Clone。 这个特性衍生出了Debug、Eq、Hash和PartialEq`。 -
const-extern-fn: 将一些extern fns改为const extern fns。 如果你使用Rust >= 1.62,这个功能是隐式启用的。 否则,它需要一个夜间的Rustc。
已废弃: use_std已被废弃,等同于std。
Rust版本支持
目前支持的最小Rust工具链版本是Rust 1.13.0。(libc 目前没有任何计划关于改变最小支持的支持的 Rust 版本)。需要较新的 Rust 特性的 API 只在较新的 Rust 工具链上可用:
| Feature | Version |
|---|---|
union |
1.19.0 |
const mem::size_of |
1.24.0 |
repr(align) |
1.25.0 |
extra_traits |
1.25.0 |
core::ffi::c_void |
1.30.0 |
repr(packed(N)) |
1.33.0 |
cfg(target_vendor) |
1.33.0 |
const-extern-fn |
1.62.0 |
平台支持
见ci/build.sh
关于每个Rust工具链的libc保证可以在哪些平台上构建。
工具链的平台。在GitHub Actions和Cirrus CI中的测试矩阵显示了
libc测试运行的平台。
许可证
本项目的授权范围是
开发者贡献
在使用该工具的过程中有任何问题欢迎开发者在社区issue中反馈。