workers node napi javascript c++ node.js binding

javascript - napi - ¿Cómo puedo usar una biblioteca C++ de node.js?



node-gyp (6)

¿Cómo puedo usar una biblioteca C ++ de node.js?


Cuidado con Swig y C ++: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8

No se recomienda ejecutar SWIG en archivos fuente C ++ (lo que aparecería en un archivo .C o .cxx). Aunque SWIG puede analizar declaraciones de clases de C ++, ignora las declaraciones que están desacopladas de su definición de clase original (las declaraciones se analizan, pero se pueden generar muchos mensajes de advertencia). Por ejemplo:

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

Es raro tener una clase de C ++ limitada a un solo archivo .h.

Además, las versiones de swig que soportan JavaScript son swig-3.0.1 o posterior.


Hay formas más nuevas de conectar Node.js y C ++. Por favor, saquea a Nan .

EDITAR La forma más rápida y fácil es nbind . Si desea escribir un complemento asíncrono, puede combinar la clase Asyncworker de nan.


Hay una nueva respuesta a esa pregunta ahora. SWIG , a partir de la versión 3.0 parece proporcionar generadores de interfaz JavaScript para Node.js, Webkit y v8.

He estado usando SWIG extensamente para Java y Python por un tiempo, y una vez que entiendes cómo funciona SWIG, casi no hay esfuerzo (comparado con ffi o el equivalente en el idioma de destino) necesario para interconectar el código C ++ con los lenguajes que SWIG soportes.

Como un pequeño ejemplo, digamos que tiene una biblioteca con el encabezado 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; } };

Para usar esta clase en un nodo, simplemente escriba el siguiente archivo de interfaz SWIG (mylib.i):

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

Crea el archivo de enlace binding.gyp:

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

Ejecute los siguientes comandos:

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

Ahora, ejecutando el nodo desde la misma carpeta, puede hacer:

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

A pesar de que necesitábamos escribir 2 archivos de interfaz para un ejemplo tan pequeño, tenga en cuenta que no tuvimos que mencionar el constructor MyClass ni el método sayHello ninguna parte, SWIG descubre estos elementos y automáticamente genera interfaces naturales.


Mira node-ffi .

node-ffi es un complemento Node.js para cargar y llamar bibliotecas dinámicas usando JavaScript puro. Se puede usar para crear enlaces a bibliotecas nativas sin escribir ningún código C ++.


Puede usar emscripten para compilar el código de C ++ en js.