#shared #dll #dylib #dlopen #so #api-bindings

dl_api

从Rust中加载动态(共享对象)库的最简单、最简单和安全的方法!

5个版本 (3个重大更新)

0.4.0 2020年7月14日
0.3.1 2019年3月7日
0.3.0 2019年2月24日
0.2.0 2018年6月26日
0.1.0 2018年6月3日

#248 in Unix API

Download history 66/week @ 2024-03-11 73/week @ 2024-03-18 38/week @ 2024-03-25 101/week @ 2024-04-01 62/week @ 2024-04-08 71/week @ 2024-04-15 77/week @ 2024-04-22 72/week @ 2024-04-29 65/week @ 2024-05-06 72/week @ 2024-05-13 68/week @ 2024-05-20 54/week @ 2024-05-27 61/week @ 2024-06-03 55/week @ 2024-06-10 233/week @ 2024-06-17 65/week @ 2024-06-24

每月420次下载
用于 12个 crate(6个直接使用)

Apache-2.0 OR Zlib

21KB
201

DL API

从Rust中加载动态(共享对象)库的最简单、最简单和安全的方法!

Build Status Docs crates.io

  • 宏用于创建动态加载C API的结构体
  • 适用于Linux(以及可能的其他Unix)和Windows

1.0版本路线图(未来功能)

  • 使在任何时候加载API的部分变得更加容易(从同一.so文件进行模块化加载)。
  • 支持一些其他不太知名的操作系统。
  • 为Rust ABI/其他ABIs提供不同的加载宏(宏的可能的ABI参数?)
  • 确保它完美无缺。

目录

入门

将以下内容添加到您的 Cargo.toml

[dependencies]
dl_api = "0.4"

示例

link!() 中的代码与 extern "C" 中的代码完全匹配。这使得您可以将 extern "C" 转换为 link!()

// 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

API文档可以在 docs.rs 上找到。

功能

没有可选功能。

升级

您可以使用 变更日志 升级此crate作为依赖项。

许可协议

许可协议为以下之一

任选其一。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将双重许可如上所述,不附加任何额外条款或条件。

欢迎贡献者(感谢您的兴趣!)无论是错误报告、错误修复、功能请求、功能实现或其他。不要害羞,积极参与。我总是抽出时间来修复错误,所以通常在报告后几天就会发布库的修补版本。功能请求可能不会那么快完成。如果您有任何问题、设计批评或希望根据您的技能水平为我找到一些工作,您可以发送电子邮件至 [email protected]。否则,这里提供了GitHub上的问题链接。在贡献之前,请查看贡献指南,并且,一如既往,请确保遵守行为准则

依赖项

~175KB