35 releases
Uses old Rust 2015
0.8.5 | Jul 20, 2024 |
---|---|
0.8.3 | Mar 5, 2024 |
0.8.1 | Sep 30, 2023 |
0.8.0 | Apr 11, 2023 |
0.2.0 | Nov 8, 2015 |
#8 in Operating systems
6,368,101 downloads per month
Used in 7,415 crates
(513 directly)
95KB
972 lines
Contains (Windows DLL, 4KB) tests/nagisa32.dll, (Windows DLL, 3KB) tests/nagisa64.dll
libloading
Bindings around the platform's dynamic library loading primitives with greatly improved memory
safety. The most important safety guarantee of this library is the prevention of dangling Symbol
s
that may occur after a Library
is unloaded.
Using this library allows the loading of dynamic libraries, also known as shared libraries, as well as the use of the functions and static variables that these libraries may contain.
libloading is available to use under ISC (MIT-like) license.
lib.rs
:
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 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.
Dependencies
~0–4.5MB