Wie kann ich eine C ++ - Bibliothek aus node.js verwenden?
javascript
c++
node.js
binding
MaiaVictor
quelle
quelle
extension
. Google c ++ nodejs ErweiterungAntworten:
Schauen Sie sich node-ffi an .
quelle
Auf diese Frage gibt es jetzt eine neue Antwort. SWIG scheint ab Version 3.0 Javascript-Schnittstellengeneratoren für Node.js, Webkit und v8 bereitzustellen.
Ich habe SWIG für eine Weile ausgiebig für Java und Python verwendet, und wenn Sie erst einmal verstanden haben, wie SWIG funktioniert, sind fast keine Anstrengungen (im Vergleich zu ffi oder dem Äquivalent in der Zielsprache) erforderlich, um C ++ - Code mit den Sprachen von SWIG zu verbinden unterstützt.
Angenommen, Sie haben eine Bibliothek mit dem Header myclass.h:
Um diese Klasse im Knoten zu verwenden, schreiben Sie einfach die folgende SWIG-Schnittstellendatei (mylib.i):
Erstellen Sie die Bindungsdatei binding.gyp:
Führen Sie die folgenden Befehle aus:
Wenn Sie nun den Knoten aus demselben Ordner ausführen, können Sie Folgendes tun:
Obwohl wir für ein so kleines Beispiel zwei Schnittstellendateien schreiben mussten, beachten Sie, dass wir weder den
MyClass
Konstruktor noch diesayHello
Methode irgendwo erwähnen mussten. SWIG entdeckt diese Dinge und generiert automatisch natürliche Schnittstellen.quelle
std::vector<>
z. B. nur%include "std_vector.i"
), und Sie können es auf der Javascript-Seite auf etwas umständliche Weise bearbeiten. Beachten Sie, dass dieser Ansatz immer noch viel einfacher und sicherer ist als das Schreiben von FFI selbst.Sie können eine node.js-Erweiterung verwenden, um Bindungen für Ihren C ++ - Code bereitzustellen. Hier ist ein Tutorial, das das behandelt:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
quelle
Sie können emscripten verwenden , um C ++ - Code in js zu kompilieren.
quelle
Es gibt neuere Möglichkeiten, Node.js und C ++ zu verbinden. Bitte plündere Nan .
BEARBEITEN Der schnellste und einfachste Weg ist nbind . Wenn Sie ein asynchrones Add-On schreiben möchten, können Sie eine
Asyncworker
Klasse aus nan kombinieren .quelle
Hier ist ein interessanter Artikel darüber, wie Sie Ihr C ++ mit Node.js ins Web bringen können
quelle
Seien Sie vorsichtig mit swig und C ++: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8
Es ist selten, dass eine C ++ - Klasse auf nur eine .h-Datei beschränkt ist.
Die Versionen von swig, die JavaScript unterstützen, sind swig-3.0.1 oder höher.
quelle
foo::bar
sowieso machen würde. Bei der Definition eines Klassenmitglieds dreht sich alles um die Implementierung. Bei den von SWIG generierten Wrappern dreht sich alles um die Schnittstelle.