thread 'main' panicked at 'calledResult::unwrap()on anErrvalue: Failure { command: "\"pkg-config\" \"--libs\" \"--cflags\" \"libavformat\"", output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "Package libavformat was not found in the pkg-config search path.\nPerhaps you should add the directory containinglibavformat.pc'\nto the PKG_CONFIG_PATH environment variable\nNo package 'libavformat' found\n" } }',`
I understand what the problem is, I should have libavformat in my system. But is there an easier way? Maybe to specify the place where they are manually? I do not want to install them in my system:
I'm asking this mainly because I want to use this crate for different architectures, so there are different libavformat.so for each architecture.
hmmmm ok. Turns out that ffmpeg is very hard to build so I already have them built, I only need to link with the right one for the right architecture.
I've been reading about build scripts (Build Scripts - The Cargo Book) but it isn't clear how I can simply link against some .a from ffmpeg for the right architecture that is being built.
Do you know how?
Looks like in the lib you linked to me, there's this:
if statik && is_static_available(val, &lib.include_paths) {
println!("cargo:rustc-link-lib=static={}", val);
} else {
println!("cargo:rustc-link-lib={}", val);
}
}
}
fn is_static_available(lib: &str, dirs: &[PathBuf]) -> bool {
let libname = format!("lib{}.a", lib);
let has = dirs.iter().map(|d| d.as_path())
.chain([Path::new("/usr/local/lib")].iter().copied())
.any(|dir| dir.join(&libname).exists());
if !has {
println!("cargo:warning=static {} not found", libname);
}
has
}
But it only prints things. How can I use it to actually link things to the right architecture?
A cargo build.rs script informs the compiler what to link to by printing things. If you are missing some feature, I recommend opening an issue on the ffmpeg-sys repository.