如何使用 node.js 中的 C + + 库?

如何使用 node.js 中的 C + + 库?

115137 次浏览

可以使用 node.js 扩展为 C + + 代码提供绑定:

Http://syskall.com/how-to-write-your-own-native-nodejs-extension

看看 Node-ffi

Node-ffi 是一个 Node.js 插件,用于使用纯 JavaScript 加载和调用动态库。它可以用来创建到本机库的绑定,而不需要编写任何 C + + 代码。

您可以使用 上面写着将 C + + 代码编译成 js。

这个问题现在有了新的答案。从3.0版本开始,SWIG似乎为 Node.js、 Webkit 和 v8提供了 Javascript 接口生成器

我在 Java 和 Python 中广泛使用 SWIG 已经有一段时间了,一旦你了解了 SWIG 是如何工作的,就几乎不需要费什么力气(与 ffi 或目标语言中的等价物相比)就可以将 C + + 代码接口到 SWIG 支持的语言中。

作为一个小例子,假设您有一个标题为 myclass.h 的库:

#include<iostream>


class MyClass {
int myNumber;
public:
MyClass(int number): myNumber(number){}
void sayHello() {
std::cout << "Hello, my number is:"
<< myNumber <<std::endl;
}
};

要在节点中使用这个类,只需编写以下 SWIG 接口文件(mylib.i) :

%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"

创建绑定文件 binding.gyp:

{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}

运行以下命令:

swig -c++ -javascript -node mylib.i
node-gyp build

现在,从同一个文件夹运行节点,您可以执行:

> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5

即使我们需要为这样一个小例子编写2个接口文件,注意我们没有提到 MyClass构造函数和 sayHello方法,SWIG 发现了这些事情,并自动生成自然的接口。

小心饮料和 C + + : Http://www.swig.org/doc1.3/swig.html#swig_nn8

在 C + + 源文件上运行 SWIG (在。C 或者。不推荐使用 cxx 文件)。尽管 SWIG 可以解析 C + + 类声明,但它忽略了与其原始类定义解耦的声明(声明会被解析,但可能会生成大量警告消息)。例如:

/* Not supported by SWIG */
int foo::bar(int) {
... whatever ...
}

很少有 C + + 类仅限于一个.h 文件。

此外,swig 支持 JavaScript 的版本是 swig-3.0.1或更高版本。

有更新的连接 Node.js 和 C + + 的方法,请参考 奶奶

剪辑 最快最简单的方法是 绑定。如果要编写异步外接程序,可以从 nan 组合 Asyncworker类。

这里有一篇关于 通过 Node.js 让 C + + 上网的有趣的文章

将 C + + 代码与 Node.js 应用程序集成的三种常用方法 - 尽管每个类别有很多不同:

  1. 自动化——在子进程中作为独立应用程序调用 C + + 。
  2. 共享库——将 C + + 例程打包到一个共享库(dll)中,然后直接从 Node.js 调用这些例程。
  3. Js Addon-将 C + + 代码编译为本地 Node.js 模块/Addon。

尝试使用来自 linux/unix 的节点程序调用 c/c + + 程序或共享库。窗口中的一个选项。这两个包基本上使我们能够调用 c/c + + 程序,类似于我们从终端/命令行调用的方式。

例如:

const shell = require('shelljs');


shell.exec("command or script name");

在窗口:

const cmd = require('node-cmd');
cmd.run('command here');

注意: shelljs 和 node-cmd 用于运行 os 命令,而不是 c/c + + 特有的命令。