Hey! I'm trying to link to the C library wkhtmltopdf
with bindgen. My build.rs
looks like this
extern crate bindgen;
use std::env;
use std::path::PathBuf;
fn main() {
// Tell cargo to tell rustc to link the system wkhtmltopdf
// shared library.
println!("cargo:rustc-link-search=native=./libwkhtmltopdf");
println!("cargo:rustc-link-lib=libwkhtmltopdf");
// Tell cargo to invalidate the built crate whenever the wrapper changes
println!("cargo:rerun-if-changed=./libwkhtmltopdf/src/lib/pdf.h");
// The bindgen::Builder is the main entry point
// to bindgen, and lets you build up options for
// the resulting bindings.
let bindings = bindgen::Builder::default()
// The input header we would like to generate
// bindings for.
.header("wrapper.h")
// Tell cargo to invalidate the built crate whenever any of the
// included header files changed.
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
// Finish the builder and generate the bindings.
.generate()
// Unwrap the Result and panic on failure.
.expect("Unable to generate bindings");
// Write the bindings to the $OUT_DIR/bindings.rs file.
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}
The library source is located in the projects directory in ./libwkhtmltopdf
and the bindings are created. cargo build
compiles, but since the lib is not linked to until the executable gets called thats obvious. However cargo test
fails with the following error message:
/usr/bin/ld: cannot find -llibwkhtmltopdf
collect2: error: ld returned 1 exit status
Any ideas?