中文 • English
在编译时间创建使用实际系统头文件动态生成的glibc/musl/...绑定。
当前rust 生态中使用的libc 存在一些问题:
- 无法快速跟进系统变化 (人力不足)
- 无法处理在不同版本间冲突的符号(eg: time_t/time64)
- 无法支持xxx_MAX 符号(libc 有意防止添加此类符号以避免不兼容)
此crate 可作为libc 的补充, 能够使用当前系统下实际的头文件,
当然, 相比与libc, 也存在一些要求:
- 系统需要支持bindgen 及其依赖
clang-dev - 如果需要与内核交互, 还需要按照内核头文件, 如:
linux-libc-dev
- 🚀 使用bindgen 编译时生成所有绑定
- 📁 文件路径结构映射到Rust模块层次结构, 使用体验与C程序一致
添加到 Cargo.toml:
[dependencies]
dlibc = "0.1"
使用:
use dlibc::stdio;
fn main() {
unsafe {
// Call system functions directly
stdio::printf(c"Hello, dynamic libc!\n".as_ptr());
}
}TODO:
- bsd 支持
- 支持function macro
- 支持在依赖包中检测符号符号存在, 即
ifdef
当前依赖的bindgen 一些feature PR尚未合入 , 还未发布到crates.io, 如有需要,请直接使用github 仓库