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
每月下载量1,979次
用于3个crates (2 直接)
500KB
14K SLoC
env-libvpx-sys
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_DIR、VPX_INCLUDE_DIR 和 VPX_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