#ebpf #xdp #linux-kernel #bindings-generator

sys libbpf-sys-cross

libbpf-sys的交叉编译友好分支

1个稳定版本

1.4.3+v1.4.52024年8月14日

#417 in Unix API

Download history 93/week @ 2024-08-10

93 每月下载量

BSD-2-Clause

7.5MB
176K SLoC

C 130K SLoC // 0.2% comments Shell 30K SLoC // 0.2% comments Rust 8K SLoC // 0.0% comments C++ 4K SLoC // 0.1% comments Automake 1.5K SLoC // 0.2% comments Happy 1.5K SLoC M4 770 SLoC // 0.1% comments Bitbake 528 SLoC // 0.1% comments GNU Style Assembly 273 SLoC BASH 45 SLoC // 0.1% comments AWK 34 SLoC // 0.3% comments Python 23 SLoC // 0.3% comments

包含 (晦涩的autoconf代码,38KB) elfutils/configure.ac,(ar库,4KB) hithere-dbgsym_1.0-1_amd64.ddeb,(Debian软件包,4KB) hithere_1.0-1_amd64.deb

libbpf-sys-cross: libbpf-sys的交叉编译友好分支

这个crate可能是临时的。最终我希望将所有更改都回传到libbpf-sys。

libbpf-sys 构建状态 crates.io版本号徽章

Rust对Linux内核中的libbpf的绑定

维护者: Alex Forster <[email protected]>
许可证: BSD-2-Clause

libbpf-sys 是使用 bindgen 从Linux内核自动生成Rust FFI绑定到 libbpf 的打包结果。

警告: 此crate不提供围绕 libbpf 的高级别或“安全”API包装器。如果您正在寻找更容易使用 libbpf 的方法,请查看这些使用 libbpf-sys 实现更高级别API的crate...

鼓励社区使用 libbpf-sys 构建更高层的 crate。如果您这样做了,请告诉我!

构建

cargo build 过程中,将编译并静态链接到结果的二进制文件中包含的 libbpf 的副本。这意味着,为了构建依赖于此 crate 的项目,您的系统必须提供工作的 C 编译器工具链(GCC 和 Clang 都应该可以工作)。此外,您的系统必须提供 zliblibelf 的开发头文件,并且它们必须可以通过 pkgconfig 查找。

在全新的 Debian/Ubuntu 安装上构建

$ apt-get install git rustc cargo build-essential pkgconf zlib1g-dev libelf-dev
$ git clone --recurse-submodules https://github.com/libbpf/libbpf-sys.git && cd libbpf-sys
$ cargo build

在全新的 RHEL/Fedora 安装上构建

$ yum install git rust cargo gcc make pkgconf zlib-devel elfutils-libelf-devel
$ git clone --recurse-submodules https://github.com/libbpf/libbpf-sys.git && cd libbpf-sys
$ cargo build

环境变量

  • LIBBPF_SYS_EXTRA_CFLAGS 可用于在 vendoring libbpf、libz 或 libelf 时传递额外的 cflags。
  • LIBBPF_SYS_LIBRARY_PATH:用于链接器查找原生库的分号分隔路径。

分发

当您将此 crate 作为项目依赖项添加时,您的结果二进制文件将动态链接到 libzlibelf。这意味着运行您二进制文件的系统必须安装这些库。

版本

由于此 crate 的 API 是自动从 libbpf 源生成的,它使用基于提供的 libbpf 版本的版本方案。

“主.次” semver 数字与每个发布提供的 libbpf 版本完全对应。例如,此 crate 的 0.6.x 发布提供了 libbpf v0.6.x 发布的 API。

为了允许人为错误,此 crate 使用“补丁” semver 数字,并且不一定与提供的 libbpf 版本匹配。例如,此 crate 的 0.6.10.6.2 发布都包含对 libbpf v0.6.1 的绑定,但后者发布包含对 crate 本身的错误修复和/或增强。

任何给定发布提供的 libbpf 的确切版本可以在版本字符串中 + 之后找到的“构建元数据” semver 部分中找到。例如,0.6.2+v0.6.1 表示 crate 版本为 0.6.2,而上游 libbpf 版本为 v0.6.1

许可和依赖关系

此 crate 在 BSD 2-Clause 许可下发布,并小心避免将病毒性许可证传播给用户。

它目前依赖于以下第三方库

网站 许可 链接
libbpf github.com/libbpf/libbpf LGPL-2.1-仅限 BSD-2-条款 静态
libelf sourceware.org/elfutils LGPL-2.1--更新 LGPL-3.0--更新 动态
zlib zlib.net Zlib 动态

依赖