35 个版本
使用旧 Rust 2015
0.8.5 | 2024年7月20日 |
---|---|
0.8.3 | 2024年3月5日 |
0.8.1 | 2023年9月30日 |
0.8.0 | 2023年4月11日 |
0.2.0 | 2015年11月8日 |
在 Rust 模式 中排名第 18 位
每月下载量 6,368,245
在 6,904 个 包(491 个直接)中使用
95KB
972 行
包含 (Windows DLL, 4KB) tests/nagisa32.dll, (Windows DLL, 3KB) tests/nagisa64.dll
libloading
围绕平台动态库加载原语的绑定,极大地提高了内存安全性。该库最重要的安全性保证是防止在 Library
卸载后可能出现的悬挂 Symbol
使用此库可以加载动态库,也称为共享库,以及使用这些库可能包含的函数和静态变量。
libloading 在 ISC (MIT-like) 许可证下可供使用。
lib.rs
:
围绕平台动态库加载原语的绑定,极大地提高了内存安全性。
使用此库可以加载 动态库,也称为共享库,以及使用其中包含的函数和静态变量。
libloading
包公开了一个跨平台接口,用于加载库并使用其内容,但并未隐藏不同平台之间的行为差异。API 文档力图尽可能多地记录这些差异。
平台特定的 API 也在 os
模块中提供。这些 API 更灵活,但安全性较低。
安装
在 Cargo.toml
中将 libloading
库添加到依赖项
[dependencies]
libloading = "0.8"
使用
在您的代码中运行以下操作
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())
}
}
编译器将确保加载的函数不会超出其来源的 Library
的生命周期,从而防止最常见的内存安全问题。
依赖项
~0–4.5MB