Crate libloading

Crate libloading 

Source
Expand description

Bindings around the platform’s dynamic library loading primitives with greatly improved memory safety.

Using this library allows the loading of dynamic libraries, also known as shared libraries, and the use of the functions and static variables they contain.

The libloading crate exposes a cross-platform interface to load a library and make use of its contents, but little is done to hide the differences in behaviour between platforms. The API documentation strives to document such differences as much as possible.

Platform-specific APIs are also available in the os module. These APIs are more flexible, but less safe.

§Installation

Add the libloading library to your dependencies in Cargo.toml:

[dependencies]
libloading = "0.8"

§Usage

In your code, run the following:

fn call_dynamic() -> Result<u32, Box<dyn std::error::Error>> {
    unsafe {
        let lib = libloading::Library::new("/path/to/liblibrary.so")?;
        let func: libloading::Symbol<unsafe extern "C" fn() -> u32> = lib.get(b"my_func")?;
        Ok(func())
    }
}

The compiler will ensure that the loaded function will not outlive the Library from which it comes, preventing the most common memory-safety issues.

Modules§

changelog
The change log.
os
Unsafe but flexible platform-specific bindings to dynamic library loading facilities.

Structs§

LibraryUnix or Windows or libloading_docs
A loaded dynamic library.
SymbolUnix or Windows or libloading_docs
Symbol from a library.

Enums§

Error
Errors.

Traits§

AsFilename
This trait is implemented for types that can be used as a filename when loading new Library instances.
AsSymbolName
This trait is implemented for types Library implementations can use to look up symbols.

Functions§

library_filenamestd
Converts a library name to a filename generally appropriate for use on the system.