¿Cómo puedo usar una biblioteca C++ de node.js?¿Cómo puedo usar una biblioteca C++ de node.js?
Respuesta
Mira node-ffi.
nodo-fi es un complemento de Node.js para la carga y llamando a las bibliotecas dinámicas utilizando JavaScript puro. Se puede usar para crear enlaces a bibliotecas nativas sin escribir ningún código C++.
Los diferentes compiladores de C++ crean diferentes ABI, por lo tanto, para usar el nodo -ffi es posible que deba envolver su código C++ con una interfaz C, o al menos lo hice para que funcione en Windows con Visual Studio. Consulte http://stackoverflow.com/questions/2045774/developing-c-wrapper-api-for-object-oriented-c-code para obtener detalles sobre cómo hacer esto. ¿O debería ser capaz de usar node-ffi en C++ sin un contenedor? – pancake
Sé que hace más de un año que se comentan, pero ... ¿es posible usar librerías C++ sin envoltorio C? –
* chirp chirp * Cualquier actualización sobre esta pregunta^ –
Puede usar una extensión node.js para proporcionar enlaces para su código C++. He aquí un tutorial que cubre lo siguiente:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
Puede usar emscripten para compilar el código de C++ en js.
Esto sería una mala idea si el objetivo de OP es obtener los beneficios de rendimiento de C++ compilado, y para ser pedante no responde la pregunta. – Greg
@Greg pero aún así es una idea que vale la pena considerar. La gente viene a esta página para varios tipos de proyectos en la mano. Creo que Emscripten es una buena opción cuando tienes la base de código C/C++ y solo quieres usarla en Nodejs. – AlexStack
Ahora hay una nueva respuesta a esa pregunta. SWIG, a partir de la versión 3.0 parece proporcionar javascript interface generators para Node.js, Webkit y v8.
He estado usando SWIG extensamente para Java y Python por un tiempo, y una vez que entienda cómo funciona SWIG, no hay casi ningún esfuerzo (comparado con ffi o el equivalente en el idioma de destino) necesario para conectar el código C++ a los idiomas que SWIG soporta.
Como un pequeño ejemplo, supongamos que tiene una biblioteca con el MyClass.h cabecera:
#include<iostream>
class MyClass {
int myNumber;
public:
MyClass(int number): myNumber(number){}
void sayHello() {
std::cout << "Hello, my number is:"
<< myNumber <<std::endl;
}
};
Para utilizar esta clase en el nodo, sólo tiene que escribir el siguiente archivo de interfaz SWIG (mylib.i) :
%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"
Cree el archivo de enlace binding.gyp:
{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}
Ejecutar el siguiente comman DS:
swig -c++ -javascript -node mylib.i
node-gyp build
Ahora, corriendo nodo de 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 teníamos que escribir 2 archivos de interfaz para un pequeño ejemplo, ano- cómo no lo hicimos tiene que mencionar el constructor MyClass
ni el método sayHello
en ninguna parte, SWIG lo descubre y genera automáticamente interfaces naturales.
¡Esto se ve increíblemente simple! Gracias por el ejemplo trabajado –
Esta respuesta me presentó a swig, que es increíble. ¡Automatiza todo el código repetitivo del complemento! Esto es demasiado bueno para ser verdad. ¿Hay algún tipo de compromiso de rendimiento masivo en juego aquí? – George
Después de jugar con swig/node.js por un momento, parece que swig no puede manejar las funciones de C++ que devuelven las matrices (más precisamente: funciones que devuelven los punteros a las matrices). Es decir, parece que no se puede construir una función en C++ que devuelva algo así como una matriz de JavaScript y que Swim la convierta automáticamente. – George
Becareful con trago y C++: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8
Correr TRAGO en los archivos fuente de C++ (lo que aparecería en un archivo .C o .cxx) no es recomendable. 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 ... }
rara vez es tener una clase de C++ limitada a un solo archivo .h.
Además, las versiones de swig que admiten JavaScript son swig-3.0.1 o posterior.
No entiendo lo que haría SWIG con la definición de 'foo :: bar' de todas formas. La definición de un miembro de la clase tiene que ver con la implementación; las envolturas que genera SWIG tienen que ver con la interfaz. – enobayram
- 1. ¿Cómo usar una biblioteca C de D?
- 2. ¿Cómo usar una biblioteca C++ en una aplicación C#?
- 3. Utilizando una biblioteca C compilada de emscripten de node.js
- 4. ¿Cómo puedo usar la biblioteca Boost :: regex.hpp en C++?
- 5. Usar una biblioteca de C del código de C#
- 6. ¿Cómo puedo usar la sesión en una biblioteca en CodeIgniter?
- 7. ¿Puedo usar otras bibliotecas node.js en Meteor?
- 8. biblioteca de validación para Node.js
- 9. ¿Cómo usar Prototype.js con Node.js?
- 10. ¿Puedo usar Qt como biblioteca C++ sin usar su marco de interfaz de usuario
- 11. ¿Es posible usar una biblioteca C con Python AppEngine?
- 12. ¿Cómo puedo usar una clase C++ de Perl?
- 13. ¿Cómo obligo a execjs a usar Node.js?
- 14. ¿Qué biblioteca C++ puedo usar para convertir un PDF a una imagen en Windows?
- 15. cómo usar biblioteca c/cpp/funciones en android
- 16. ¿Cómo puedo automatizar las implementaciones de Node.js?
- 17. Cómo usar uniones de mangosta para Node.js
- 18. Biblioteca de dibujo fácil de usar en c/C++?
- 19. ¿Cómo puedo comparar una aplicación Node.js basada en websocket?
- 20. ¿Puedo usar CoffeeScript en lugar de JS para node.js?
- 21. ¿Cómo construir una biblioteca estática Objective-C?
- 22. ¿Necesita usar path.join en Node.js?
- 23. ¿Se puede usar node.js con IIS?
- 24. Biblioteca Node.js que implementa W3C XML DOM?
- 25. ¿Cómo puedo enlazar a una biblioteca con Code :: Blocks?
- 26. ¿Cómo puedo reconocer NODE_ENV en Node.js?
- 27. ¿Cómo puedo usar el código Delphi desde una aplicación C#?
- 28. ¿Cómo usar D3 en Node.js correctamente?
- 29. Usar una biblioteca estática en Qt Creator
- 30. ¿Cómo puedo usar GetNextWindow() en C#?
La palabra clave es 'extensión'. Extensión de Google [C++ nodejs] (https://www.google.co.uk/search?q=c%2B%2B+nodejs+extension) –
Siga este enlace. Ha proporcionado un programa de ejemplo y lo ha explicado paso a paso. http://www.benfarrell.com/2013/01/03/c-and-node-js-an-unholy-combination-but-oh-so-right/ –