美文网首页
Node_Rust动态库

Node_Rust动态库

作者: 空腹无才 | 来源:发表于2024-03-13 17:14 被阅读0次

    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)
    

    相关文章

      网友评论

          本文标题:Node_Rust动态库

          本文链接:https://www.haomeiwen.com/subject/ivkizdtx.html