Node_Rust动态库

Rust 动态链接库

什么是动态库

动态库是一种包含可重用代码和数据的文件,可以在程序运行时被加载和执行。动态库通常包含一组函数或程序模块,可以被多个程序共享和调用。与静态库不同的是,动态库在程序运行时才会被加载到内存中,可以减少程序的内存占用和提高程序的灵活性和可维护性。动态库的文件扩展名通常为.dll(在Windows系统中)或.so(在Linux系统中)。

RUST 部分

  • 创建Rust项目
cargo new my_project
  • 新建 lib.rs 包文件,并写入需要运行的内容

src/lib.rs

// no_mangle 修饰符用于告诉编辑器,不要修改函数或者静态变量名称
#[no_mangle]
pub extern  fn add_number(a: i32) -> i32 {
    a + 0
}
  • 修改Cargo.toml 配置,添加如下内容
# [lib] 用于创建一个library库 
[lib]
# 库名
name = "chris_math"
# 库类型  rlib 用于Rust 项目使用的静态库,  cdylib 兼容C 的动态库,用于与其他语言交互
# cdylib 各平台生成的动态库
# Windows:.dll
# Linux:.so
# macOS:.dylib
crate-type = ["rlib", "cdylib"]
  • 执行打包命令
cargo build

打包命令执行完成后 ,回多出一个target文件夹,我们需要的动态库在 target/debug 中

1710341932932-1710342106216-5.jpg

Nodejs 部分

  • 创建nodejs项目,初始化 package.json 文件
npm init -y
  • 下载 ffi-napi 依赖
npm install ffi-napi -S
  • 导入动态库
const fii = require("ffi-napi");
const path = require("path");

const _path = path.join(__dirname, "../chris_math/target/release/chris_math.dll"); // chris_math.dll 依赖库
const lib = fii.Library(_path, {
    "add_number": ['int', ["int", "int"]]  //  函数名:[返回值类型,[参数类型, 参数类型]]

const _res = lib.add_number(1,4);
console.log(_res)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容