#shared #dlopen #load #api-bindings #shared-memory #dylib #safe-bindings

libloading

围绕平台动态库加载原语的绑定,极大地提高了内存安全性

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 位

Download history 1278316/week @ 2024-05-04 1294903/week @ 2024-05-11 1395246/week @ 2024-05-18 1249273/week @ 2024-05-25 1357515/week @ 2024-06-01 1467979/week @ 2024-06-08 1391850/week @ 2024-06-15 1447302/week @ 2024-06-22 1292499/week @ 2024-06-29 1356862/week @ 2024-07-06 1372071/week @ 2024-07-13 1473983/week @ 2024-07-20 1469453/week @ 2024-07-27 1548133/week @ 2024-08-03 1701261/week @ 2024-08-10 1404470/week @ 2024-08-17

每月下载量 6,368,245
6,904 包(491 个直接)中使用

ISC 许可证

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