从Node.js调用C ++库(Node addons / node-ffi)

我正在尝试将外部C ++库(我可以访问.so文件以及头文件)集成到我的Node.js应用程序中。

经过大量的研究,我的select被缩减为:

  1. 编写一个节点插件

  2. 使用node-ffi

从node-ffi的gitHub的定义,我不能确定它会或不会直接在C ++库上工作:

node-ffi是一个用于使用纯JavaScript加载和调用dynamic库的Node.js插件。 它可以用来在不编写任何C ++代码的情况下创build与本地库的绑定。

所以我的问题是:

  • 选项1)是否意味着以某种方式重写外部C ++库?
  • node-ffi是否能够直接调用C ++库,而不需要任何forms的C封装器?

我不是C / C ++的专家,所以如果我错过了一些基本的东西可以回答,请让我知道,这样我可以改善我的问题。

node-ffi似乎主要用于C程序。 我在上个星期经历了这个,发现用node addons运气好多了。 你所要做的就是在库和C ++代码之间编写一个填充程序。 在我的情况下,我需要对安全协议的数据包进行编码和解码,所以我制作了包含数据包的节点缓冲区,并编写了从缓冲区中获取数据的C ++代码,然后将数据发送到我编码的C代码解码数据包。

本页面: http : //luismreis.github.io/node-bindings-guide/docs/returning.html有一些很好的例子,介绍如何从C ++中的node.js缓冲区获取数据。

其他答案中缺less的是什么? 我很乐意提供帮助。 这里的代码示例是用C ++编写的。 我正在说明人们(如何使C或C ++库)定义一个外部接口供他人使用。 ffi的意义在于,你使用任何你使用的语言(在这种情况下是javascript)而不是C / C ++(如节点扩展的情况下)来编写包装器。如果你的原始库是在其他东西中使用的共享DLL,它已经有了一个接口,你只需要在javascript中编写包装代码来告诉节点它是如何工作的,而不是用C ++编写东西,并将其暴露在本地nodejs库中。

nbind现在可以使用外部C ++库编写Node.js插件。 您基本上创build了一个新的源文件,包括库头文件,nbind头文件和一些列出库的类和方法的macros调用。 然后nbind处理剩下的事情。

libui-node是一个真实世界的例子,使用nbind来调用libui来生成来自Node.js的本地小部件的用户界面。 还有一个简短的教程如何创build绑定vg ,生物信息学相关的C + +库。

有很简单的方法来链接任何你的库( .so .dll .a )。 您应该在binging.gyp文件中添加具有正确path的库:

 { "targets": [ { "target_name": "addon", "sources": [ "hello.cc" ], "libraries": [ "path/toYourLibrary/yourLibName.dll or yourLibName.so" ] } ] } 

还有更简单的方法来使用nan编写好的插件。 检查链接获取更多信息github链接