libc - 针对平台系统库的原始 FFI 绑定
libc
提供了所有必要的定义,以便在 Rust 支持的每个平台上轻松与 C 代码(或"类 C"代码)进行互操作。这包括类型定义(例如 c_int
)、常量(例如 EINVAL
)以及函数头(例如 malloc
)。
该 crate 在 crate 根下导出所有底层平台类型、函数和常量,因此所有项都可以通过 libc::foo
访问。所有导出的 API 的类型和值与 libc 编译所针对的平台相匹配。
关于此库设计的更详细信息可以在其相关 RFC 中找到。
v1.0 路线图
目前,libc
有两个活跃分支:main
用于即将发布的 v1.0 版本,libc-0.2
用于当前已发布的版本。默认情况下,所有 pull request 应针对 main
分支;一旦审核通过,如有需要可以将其 cherry-pick 到 libc-0.2
分支。
一旦 v1.0 发布,我们将停止发布新的 v0.2 版本。
有关更多详细信息,请参阅 CONTRIBUTING.md 中的相关部分。
使用方法
在您的 Cargo.toml
中添加以下内容:
[dependencies]
libc = "0.2"
特性
-
std
:默认情况下,libc
链接到标准库。禁用此特性可以移除这个依赖,从而能够在#![no_std]
crate 中使用libc
。 -
extra_traits
:libc
中实现的所有struct
都是Copy
和Clone
的。此特性派生Debug
、Eq
、Hash
和PartialEq
。 -
const-extern-fn
:将一些extern fn
更改为const extern fn
。如果您使用的 Rust 版本 >= 1.62,此特性会被隐式启用。否则,它需要 nightly 版本的 rustc。
Rust 版本支持
当前支持的最低 Rust 工具链版本是 Rust 1.71.0(libc 目前没有关于更改最低支持 Rust 版本的任何政策;这样的政策正在制定中)。
平台支持
您可以在 docs.rs 上查看特定平台(目标)的文档,选择您想查看的平台。
请查看 ci/build.sh
以了解 libc
保证可以在每个 Rust 工具链上构建的平台。GitHub Actions 和 Cirrus CI 上的测试矩阵显示了运行 libc
测试的平台。
许可证
本项目采用以下两种许可证之一:
您可以选择其中之一。
贡献
我们欢迎所有想要贡献的人。请查看贡献指南以获取更多信息。
对本项目的任何形式的贡献(问题、pull request 等)都必须遵守 Rust 的行为准则。
除非您明确说明,否则您有意提交以包含在 libc
中的任何贡献(根据 Apache-2.0 许可证的定义)均应按上述方式双重许可,无需任何额外条款或条件。