我正试图为libvmaf发布一个sys机箱。不幸的是,我不能简单地动态链接到libvmaf,因为它不是在任何地方发布的,我需要从源代码构建它,并将它包含在我的库中。不幸的是,libvmaf是绝对巨大的,我的.rlib文件以1.4MB的速度结束,这超过了crates.io的上传限制。我在这里骨瘦如柴吗?
这是我的build.rs文件
use meson_next;
use std::env;
use std::fs::canonicalize;
use std::path::PathBuf;
fn main() {
//env::set_var("RUST_BACKTRACE", "1");
let build_dir = PathBuf::from(env::var("OUT_DIR").unwrap()).join("build");
let lib_dir = build_dir.join("src");
let build_dir_str = build_dir.to_str().unwrap();
let lib_dir_str = lib_dir.to_str().unwrap();
meson_next::build("vmaf/libvmaf", build_dir_str);
println!("cargo:rustc-link-lib=static=vmaf");
println!("cargo:rustc-link-search=native={lib_dir_str}");
// Path to vendor header files
let headers_dir = PathBuf::from("vmaf/libvmaf/include");
let headers_dir_canonical = canonicalize(headers_dir).unwrap();
let include_path = headers_dir_canonical.to_str().unwrap();
// Generate bindings to libvmaf using rust-bindgen
let bindings = bindgen::Builder::default()
.header("vmaf/libvmaf/include/libvmaf/libvmaf.h")
.clang_arg(format!("-I{include_path}"))
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
// Write bindings to build directory
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}发布于 2022-11-24 21:19:21
通常,您不应该在包中包含已编译的库。包含源代码,并让构建脚本执行生成。
这通常会导致一个较小的包,也意味着您的包可以在任何目标体系结构(由库支持)上工作。
https://stackoverflow.com/questions/74566049
复制相似问题