从 node.js 调用 C 代码

Posted

技术标签:

【中文标题】从 node.js 调用 C 代码【英文标题】:Call C code from node.js 【发布时间】:2015-11-19 02:53:05 【问题描述】:

假设我有 C 代码的源文件和头文件(bus-driver.cbus-driver.h我可以在其中调用函数吗来自 node.js

例如 bus-driver.h

void bus_init(void);
void bus_write(char *buf);

我想从 node.js 调用这些函数。

【问题讨论】:

可能是重复的? ***.com/questions/9629677/… 或者看看:nodejs.org/api/addons.html 我读过它们,但我不明白它们。如果你能给我举个 bus-driver.h 的例子,那可能会很有帮助,谢谢。 【参考方案1】:

nodeffi 似乎是最简单的方法。 我没有对其进行测试,因此它可能存在我现在没有意识到的问题。

但我建议按照tutorial 做类似的事情。 安装nodeffi:

如果没有,请为您的总线驱动程序生成一个库,我们称之为 libbusdriver。

然后在你的 javascript 中做类似这样的事情:

var ffi = require('ffi');

var libbusdriver = ffi.Library('libbusdriver', 
  'bus_init': [ 'void', [ 'void' ] ],
  'bus_write': [ 'void', [ 'string' ] ],
);
libbusdriver.bus_init();
libbusdriver.bus_write("Hello");

如果有帮助,请告诉我。

【讨论】:

我试过了,执行node.js程序后出现这个错误Error: Dynamic Linking Error: libusbdriver.so: cannot open shared object file: No such file or directory library 和 test.js 文件在同一个目录中,我尝试重命名 library .so 和 .a 没有区别 你是把它命名为 libusbdriver 还是 libbusdriver? 对不起,我将其更改为 libbusdriver 但得到相同的错误。把node.js程序和库放在同一个目录下是真的吗? 您是否生成了带有共享标志的库? 我用gcc -c libbusdriver.c -o libbusdriver.o编译,ar rcs libbusdriver libbusdriver.o生成库跨度>

以上是关于从 node.js 调用 C 代码的主要内容,如果未能解决你的问题,请参考以下文章

Node.js模块定义总结

如何从 node.js 调用外部脚本/程序

好厉害的库edge js 实现C 与node js互操作

从模块中调用 Node.js 模块函数

node js 模块系统

node.js模块系统函数