簡體   English   中英

在 sys crate 上達到 crates.io 的上傳限制

[英]Hitting upload limit on crates.io on a sys crate

我正在嘗試為 libvmaf 發布一個 sys crate。 不幸的是,我不能簡單地動態鏈接到 libvmaf,因為它沒有分發到任何地方,我需要從源代碼構建它並將其包含在我的庫中。 不幸的是,libvmaf 非常龐大,my.rlib 文件最終達到 1.4 兆字節,超過了 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!");
}

通常,您不應在 package 中包含已編譯的庫。包含源代碼,並讓您的構建腳本執行構建。

這通常會導致 package 變小,也意味着您的 package 可以在任何目標架構(庫支持的架構)上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM