libusb-sys 0.0.1

Rust bindings for libusb 1.0.
docs.rs failed to build libusb-sys-0.0.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: libusb-sys-0.2.3

Libusb Rust Bindings

The libusb-sys crate provides declarations and linkage for the libusb C library. Following the *-sys package conventions, the libusb-sys crate does not define higher-level abstractions over the native libusb library functions.

Dependencies

In order to use the libusb-sys crate, you must have:

  • The libusb library installed where it can be found by pkg-config.
  • A Rust runtime with the libc crate. Since the libc crate's interface is considered unstable, you must install Rust from the nightly builds or from the latest source.

All systems supported by libusb are also supported by the libusb-sys crate. It's been tested on Linux, OS X, and Windows.

Cross-Compiling

To link to a cross-compiled version of the native libusb library, it's necessary to set several environment variables to configure pkg-config to work with a cross-compiler's sysroot. Autotools Mythbuster has a good explanation of supporting cross-compilation with pkg-config.

However, Rust's pkg-config build helper doesn't support calling a $CHOST-prefixed pkg-config. It will always call pkg-config without a prefix. To cross-compile libusb-sys with the pkg-config build helper, one must define the environment variables PKG_CONFIG_DIR, PKG_CONFIG_LIBDIR, and PKG_CONFIG_SYSROOT_DIR for the default pkg-config. It's also necessary to set PKG_CONFIG_ALLOW_CROSS to tell Rust's pkg-config helper that it's okay to proceed with a cross-compile.

To adapt the pkg-config wrapper in the Autotools Mythbuster guide so that it works with Rust, one will end up with a script similar to the following:

#!/bin/sh

SYSROOT=/build/root

export PKG_CONFIG_DIR=
export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
export PKG_CONFIG_ALLOW_CROSS=1

cargo build

Usage

Add libusb-sys as a dependency in Cargo.toml:

[dependencies]
libusb-sys = "0.0.1"

Import the libusb-sys crate and use the functions as they're defined in the native libusb library. See the libusb 1.0 API documention for more usage information.

extern crate "libusb-sys" as ffi;

fn main() {
  let version = unsafe { ffi::libusb_get_version() };

  println!("libusb v{}.{}.{}.{}", version.major, version.minor, version.mirco, version.nano);
}

Finding Help

Since libusb-sys is no more than a wrapper around the native libusb library, the best source for help is the information already available for libusb:

License

Copyright © 2015 David Cuddeback

Distributed under the MIT License.