You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ffi-napi实现从共享对象(.so/.dll)向NodeJS传递变量

解决方法

问题核心

ffi-napi 的 ffi.Library() 第二个参数仅用于声明共享库导出的函数,全局导出变量无法通过这个配置直接读取,需要借助 ref-napi 提供的类型声明和库实例的get()方法读取。

前置依赖

首先安装需要的工具库:

npm install ffi-napi ref-napi

调整后的NodeJS代码

const ffi = require("ffi-napi");
const ref = require("ref-napi");

// 加载共享库时不需要在配置中声明全局变量
const mylibrary = ffi.Library("./mylibrary.so", {});

// 调用get方法读取全局变量,第二个参数指定变量对应的C类型
const exampleValue = mylibrary.get("example", ref.types.int);

console.log("Example variable is", exampleValue);

补充说明

  • 如果是Windows平台的DLL,注意C代码编译时需要给全局变量添加导出声明,否则DLL不会导出该变量:
    // Windows DLL编译时的写法
    __declspec(dllexport) int example = 10;
    
  • 共享库编译的位数需要和运行的NodeJS进程位数一致(同为32位或同为64位),否则会出现加载失败的问题。
  • 如果需要修改共享库的全局变量,可以调用set()方法:
    mylibrary.set("example", ref.types.int, 20);
    

内容的提问来源于stack exchange,提问作者Thor-x86_128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:04