How to fix cargo crash: error: failed to run custom build command for `hdf5-sys v0.8.1`

Problem

During cargo build or cargo run, you see an error message such as

example.txt
error: failed to run custom build command for `hdf5-sys v0.8.1`

Caused by:
  process didn't exit successfully: `/home/uli/dev/Versatile/RustyMatrix/target/debug/build/hdf5-sys-555129b7288a757c/build-script-build` (exit status: 101)
  --- stdout
  Attempting to find HDF5 via pkg-config...
  cargo:rerun-if-env-changed=HDF5_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=HDF5_STATIC
  cargo:rerun-if-env-changed=HDF5_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

  --- stderr

  thread 'main' (963963) panicked at /home/uli/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/hdf5-sys-0.8.1/build.rs:548:13:
  Unable to locate HDF5 root directory and/or headers.
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...

Solution

Your Rust project depends on the hdf5-sys crate, which, in turn, depends on the system hdf5 library.

While you could install it using sudo apt -y install libhdf5-dev, depending on your Ubuntu version this might install a version not supported by the hdf5-sys crate.

Hence, I recommend changing your Cargo.toml to specifically enable the static feature which directly compiles in a compatible version of libhdf5.

example.toml
hdf5 = "0.8.1"
hdf5-sys = { version = "0.8.1", features = ["static"] }

After that, you can retry your cargo command.


Check out similar posts by category: Rust