Files
third_party_rust_libc/README zh.md
fangting 2736abf574 add oh user guide
Signed-off-by: fangting <fangting12@huawei.com>
2023-05-04 11:58:52 +08:00

3.6 KiB
Raw Permalink Blame History

libc - 提供 C 标准库的rust侧FFI

GHA Status Cirrus CI Status Latest Version Documentation License

引入背景

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中实现的所有结构'都是CopyClone。 这个特性衍生出了DebugEqHashPartialEq`。

  • 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

平台支持

特定平台文档(master分支)

ci/build.sh 关于每个Rust工具链的libc保证可以在哪些平台上构建。 工具链的平台。在GitHub ActionsCirrus CI中的测试矩阵显示了 libc测试运行的平台。

许可证

本项目的授权范围是

开发者贡献

在使用该工具的过程中有任何问题欢迎开发者在社区issue中反馈。