首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sys机箱上点击crates.io上的上传限制

在sys机箱上点击crates.io上的上传限制
EN

Stack Overflow用户
提问于 2022-11-24 20:44:36
回答 1查看 30关注 0票数 1

我正试图为libvmaf发布一个sys机箱。不幸的是,我不能简单地动态链接到libvmaf,因为它不是在任何地方发布的,我需要从源代码构建它,并将它包含在我的库中。不幸的是,libvmaf是绝对巨大的,我的.rlib文件以1.4MB的速度结束,这超过了crates.io的上传限制。我在这里骨瘦如柴吗?

这是我的build.rs文件

代码语言:javascript
复制
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!");
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-24 21:19:21

通常,您不应该在包中包含已编译的库。包含源代码,并让构建脚本执行生成。

这通常会导致一个较小的包,也意味着您的包可以在任何目标体系结构(由库支持)上工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74566049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档