The easiest, simplest and safest way to load dynamic (shared object) libraries from Rust!
Add the following to your Cargo.toml
.
[dependencies]
dl_api = "0.4"
The code inside of the curly braces for link!()
matches exactly with code
inside of the curly braces for extern "C"
. This makes it easy for you to turn
your extern "C"
s into link!()
s.
// Shared object: either "libmylibrary.so.1", "mylibrary-1.dll" or "libMyLibrary.dylib"
dl_api::link!(MyApi, "libmylibrary.so.1", {
fn cFunction(param_name: ParamType) -> ReturnType;
});
fn main() {
let api = MyApi::new().unwrap(); // unwrap the `Result`.
let rtn: ReturnType = unsafe {
(api.cFunction)(0);
};
}
API documentation can be found on docs.rs.
There are no optional features.
You can use the
changelog
to facilitate upgrading this crate as a dependency.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
Contributors are always welcome (thank you for being interested!), whether it
be a bug report, bug fix, feature request, feature implementation or whatever.
Don’t be shy about getting involved. I always make time to fix bugs, so usually
a patched version of the library will be out a few days after a report.
Features requests will not complete as fast. If you have any questions, design
critques, or want me to find you something to work on based on your skill level,
you can email me at jeronlau@plopgrizzly.com.
Otherwise,
here’s a link to the issues on GitHub.
Before contributing, check out the
contribution guidelines,
and, as always, make sure to follow the
code of conduct.