11个稳定版本

5.1.3 2023年9月10日
5.1.2 2022年7月14日
5.1.1 2022年5月30日
5.1.0 2021年6月7日
4.0.11 2019年7月12日

视频类别中排名第99

Download history 52/week @ 2024-03-13 25/week @ 2024-03-20 31/week @ 2024-03-27 45/week @ 2024-04-03 38/week @ 2024-04-10 293/week @ 2024-04-17 448/week @ 2024-04-24 259/week @ 2024-05-01 244/week @ 2024-05-08 245/week @ 2024-05-15 275/week @ 2024-05-22 338/week @ 2024-05-29 466/week @ 2024-06-05 548/week @ 2024-06-12 370/week @ 2024-06-19 500/week @ 2024-06-26

每月下载量1,979
用于3个crates (2 直接)

MPL-2.0许可证

500KB
14K SLoC

env-libvpx-sys

Crates.io build Documentation

libvpx的Rust绑定。

功能和特性

env-libvpx-sys crate提供了以下功能:

  • 它只提供-sys层。VPX头文件通过bindgen进行包装,并与本地库进行链接。但是不提供高级Rust接口。(有关简单的更高级别接口,请参阅vpx-encode crate)。
  • 它添加了针对Windows、Linux和Mac的持续集成测试
  • 它包含捆绑的bindgen生成的FFI包装器,适用于几个版本的libvpx。您还可以启用此crate的generate功能,为自定义版本的libvpx动态生成FFI。
  • 它最初是libvpx-native-sys的分支(见下面的历史记录)。

如何选择libvpx版本

在编译时,build.rs确定如何链接libvpx,包括使用哪个版本。

选项1:让pkg-config找到它

此场景是默认设置,当环境变量VPX_LIB_DIR未设置时使用。在这种情况下,pkg-config将尝试自动发现libvpx。

如果设置了VPX_VERSION,则build.rs将确保pkg-config返回相同的版本。如果没有设置VPX_VERSION,则使用pkg-config返回的版本。

请注意,pkg-config 将检查 VPX_STATIC 环境变量,如果设置了该变量,将尝试进行静态链接。

选项 2:手动指定 libvpx 位置

在这种情况下,适当地设置以下环境变量:VPX_LIB_DIRVPX_INCLUDE_DIRVPX_VERSION。注意:如果 VPX_VERSION 与链接的库不匹配

此外,VPX_STATIC 可以设置为 1 以强制进行静态链接。

关于使用 cargo 功能指定库版本的替代方案的理论讨论

在某个时候,cargo 功能被视为选择使用库版本的一种手段。然而,这意味着最终的应用程序二进制文件需要指定所使用的库版本。这将要求从最终应用程序二进制文件到 env-libvpx-sys 的依赖项链中的所有 crates 都必须明确依赖于 env-libvpx-sys(即使,正如很可能,在 vpx 包装 crate(如 vpx-encode)中,中间或最终 crate 并未直接调用 env-libvpx-sys)。

作为一个额外问题,由于 cargo 功能是可添加的,在这种场景下可能会出现具有两组功能的冲突构建请求。当前替代方案,即设置环境变量 VPX_VERSION,自然地强制选择单个版本。

使用 bindgen 重新生成绑定

如果您的版本在 generated/ 目录中没有预先生成的绑定,您可以使用 generate cargo 功能在构建过程中让 bindgen 自动生成它们。

要保存您的(重新)生成的绑定并将其提交到该存储库,请使用带有 generate cargo 功能进行构建。最简单的方法是使用脚本 regen-ffi.sh(或在 Windows 上的 regen-ffi.bat)。然后,将生成的文件从 target/debug/build/env-libvpx-sys-<hash>/out/ffi.rs 复制到 generated/vpx-ffi-<version>.rs。最后,将此文件添加到版本控制中。

历史和感谢

这最初是 libvpx-native-sys 的分支,其中包含一个简化 Windows 使用的 修复。感谢那些作者!

依赖关系

~125KB