| Crates.io | libusb1-sys |
| lib.rs | libusb1-sys |
| version | 0.7.0 |
| created_at | 2019-07-28 09:01:39.699693+00 |
| updated_at | 2024-04-27 15:43:04.491206+00 |
| description | FFI bindings for libusb. |
| homepage | https://github.com/a1ien/rusb |
| repository | https://github.com/a1ien/rusb.git |
| max_upload_size | |
| id | 152288 |
| size | 1,311,083 |
The libusb1-sys crate provides declarations and linkage for the libusb C library. Following the
*-sys package conventions, the libusb1-sys crate does not define higher-level abstractions over
the native libusb library functions.
In order to use the libusb1-sys crate, you must have the libusb library installed where it can be
found by pkg-config.
All systems supported by libusb are also supported by the libusb1-sys crate. It's been tested on
Linux, OS X, and Windows.
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 libusb1-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
Add libusb1-sys as a dependency in Cargo.toml:
[dependencies]
libusb1-sys = "0.6"
Import the libusb1_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 libusb1_sys as ffi;
fn main() {
let version = unsafe { ffi::libusb_get_version() };
println!("libusb v{}.{}.{}.{}", version.major, version.minor, version.micro, version.nano);
}
libusb1-sys exports metadata so that dependent crates can find the correct libusb.h header
and compile native code that depends on libusb. If a crate has a direct dependency on libusb1-sys,
its build script has access to the following environment variables:
DEP_USB_1.0_INCLUDE contains the include path with the correct libusb.hDEP_USB_1.0_VENDORED is set with a value of 1 if libusb1-sys compiled and linked to
its vendored copy of libusbDEP_USB_1.0_STATIC is set with a value of 1 if static linkage has been used instead of
dynamic.Since libusb1-sys is no more than a wrapper around the native libusb library, the best source for
help is the information already available for libusb:
Distributed under the MIT License.
If you link native libusb library statically then you must follow GNU LGPL from libusb.