从 node.js 调用 C 代码
Posted
技术标签:
【中文标题】从 node.js 调用 C 代码【英文标题】:Call C code from node.js 【发布时间】:2015-11-19 02:53:05 【问题描述】:假设我有 C 代码的源文件和头文件(bus-driver.c 和 bus-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 代码的主要内容,如果未能解决你的问题,请参考以下文章