如何使用node.js中的C ++库?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用node.js中的C ++库?相关的知识,希望对你有一定的参考价值。
如何使用node.js中的C ++库?
看看node-ffi。
node-ffi是一个Node.js插件,用于使用纯javascript加载和调用动态库。它可用于创建与本机库的绑定,而无需编写任何C ++代码。
现在有一个新问题的答案。 SWIG,从版本3.0开始,似乎为Node.js,Webkit和v8提供javascript interface generators。
我已经将SWIG广泛用于Java和Python一段时间了,一旦你理解了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发现这些东西,并自动生成自然界面。
您可以使用node.js扩展来为C ++代码提供绑定。这是一个涵盖以下内容的教程:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
您可以使用emscripten将C ++代码编译为js。
有更新的方法来连接Node.js和C ++。拜托,在Nan掠夺。
编辑最快最简单的方法是nbind。如果你想编写异步附加组件,你可以组合来自nan的Asyncworker
类。
这是一篇关于Getting your C++ to the Web with Node.js的有趣文章
将C ++代码与Node.js应用程序集成的三种通用方法 - 尽管每个类别中有很多变体:
- 自动化 - 将您的C ++称为子进程中的独立应用程序。
- 共享库 - 将C ++例程打包到共享库(dll)中,并直接从Node.js调用这些例程。
- Node.js Addon - 将您的C ++代码编译为本机Node.js模块/插件。
很喜欢swig和C ++:http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8
不建议在C ++源文件(将出现在.C或.cxx文件中)上运行SWIG。即使SWIG可以解析C ++类声明,它也会忽略与原始类定义分离的声明(声明被解析,但可能会生成大量警告消息)。例如:
/* Not supported by SWIG */ int foo::bar(int) { ... whatever ... }
很少有C ++类仅限于一个.h文件。
此外,支持JavaScript的swig版本是swig-3.0.1或更高版本。
以上是关于如何使用node.js中的C ++库?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
如何在编译为 WebAssembly 的 Rust 库中使用 C 库?