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