# hotload [![crates.io](https://crates.io/crates/hotload) ## Quick example ```rust use dlopen2::wrapper::{Container, WrapperApi}; use hotload::types::Hotload; // Generate the following rust calling methods hotload::gen_rust_no_mangle!((MyApi, "../call_lib/src/lib.rs")); // #[derive(WrapperApi)] // struct MyApi { // test_print: fn(msg: String), // init_data: fn(msg: String), // stop_runtime: fn(), // } fn main(){ let dll: Hotload = Hotload::new("../call_lib/target/release/call_lib.dll"); // "dll created" or "file rename to" is actively loaded dll.init_load(|_, _| {}).unwrap(); let mut count = 0; loop { count += 1; dll.test_print(format!("msg{count}")); } } ``` ## Features ### Main features * Zero cost hot update dynamic library; supporting DLL, SO ## Comparison with other libraries | Feature | dlopen2 | [hotload](https://gitee.com/guoyucode/hotload) | hot-lib-reloader | |------------------------------------|------------|---------------------------------------------------------|-------------------------------------------------| | Basic functionality | Yes | Yes | Yes | | Multiplatform | Yes | Yes | Yes | | Dangling symbol prevention | Yes | Yes | Yes | | Thread safety | Yes | Yes | Yes | Loading of symbols into structures | Yes | Yes | Yes | | Overhead | Minimal | Minimal | Minimal | | Low-level, unsafe API | Yes | Yes | Yes | | Object-oriented friendly | Yes | Yes | Yes | | Load from the program itself | Yes | Yes | Yes | | Obtaining address information (dladdr) | Yes | Yes | Yes | | Auto reload | **No** | Yes | Yes | | Is haved load new dll event | **No** | Yes | **No** | | Zero cost, Is not lock | **No** | Yes | **No** | | Generate rust call method | **No** | Yes | Yes | ## Usage Cargo.toml: ```toml [dependencies] dlopen2 = "0.6" hotload = "0.9" ``` ## Documentation [Cargo documentation](https://docs.rs/hotload) ## License This code is licensed under the [MIT](./LICENSE) license. ## Changelog [GitHub](https://gitee.com/guoyucode/hotload) ## Acknowledgement Special thanks to [dlopen2](https://github.com/nagisa) and [hot-lib-reloader](https://crates.io/crates/hot-lib-reloader)