【问题标题】:Call C code from node.js从 node.js 调用 C 代码
【发布时间】: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 调用这些函数。

【问题讨论】:

标签: c++ c node.js


【解决方案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生成库跨度>
猜你喜欢
  • 2012-09-08
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多