मैं node.js से C++ लाइब्रेरी का उपयोग कैसे कर सकता हूं?मैं node.js से C++ लाइब्रेरी का उपयोग कैसे कर सकता हूं?
उत्तर
देखो।
नोड-एफएफआई शुद्ध जावास्क्रिप्ट का उपयोग करके गतिशील पुस्तकालयों को लोड करने और कॉल करने के लिए एक नोड.जेएस एडन है। इसका उपयोग देशी पुस्तकालयों को किसी भी सी ++ कोड के बिना बाइंडिंग बनाने के लिए किया जा सकता है।
विभिन्न सी ++ कंपाइलर विभिन्न एबीआई बनाते हैं, इसलिए नोड का उपयोग करने के लिए -फि आपको अपने सी ++ कोड को सी इंटरफ़ेस के साथ लपेटना पड़ सकता है - या कम से कम मैंने इसे विजुअल स्टूडियो के साथ विंडोज पर काम करने के लिए किया था। इसे कैसे करें इस पर विवरण के लिए http://stackoverflow.com/questions/2045774/developing-c-wrapper-api-for-object-oriented-c-code देखें। या मैं एक आवरण के बिना सी ++ पर नोड-एफएफआई का उपयोग करने में सक्षम होना चाहिए? – pancake
मुझे पता है कि यह टिप्पणियों के बाद से एक वर्ष से अधिक है लेकिन ... सी सी ++ libs का उपयोग सी सी रैपर के बिना करना संभव है? –
* chirp chirp * इस प्रश्न पर कोई भी अपडेट^ –
आप अपने सी ++ कोड के लिए बाइंडिंग प्रदान करने के लिए node.js एक्सटेंशन का उपयोग कर सकते हैं। यहाँ एक ट्यूटोरियल है कि शामिल किया गया है कि: node-ffi पर
http://syskall.com/how-to-write-your-own-native-nodejs-extension
आप emscripten का उपयोग js में सी ++ कोड संकलित करने के लिए कर सकता है।
यह एक बुरा विचार होगा यदि ओपी का लक्ष्य संकलित सी ++ के प्रदर्शन लाभ प्राप्त करना है, और pedantic होने के लिए यह सवाल का जवाब नहीं देता है। – Greg
@ ग्रेग लेकिन फिर भी यह विचार करने योग्य विचार है। लोग विभिन्न प्रकार की परियोजनाओं के लिए इस पृष्ठ पर आते हैं। मुझे लगता है कि जब आपके पास सी/सी ++ कोड बेस है और सिर्फ इसे नोडज में उपयोग करना चाहते हैं तो एम्सस्क्रिप्टन एक अच्छा विकल्प है। – AlexStack
अब उस प्रश्न का एक नया जवाब है। SWIG, संस्करण 3.0 के रूप में Node.js, वेबकिट और v8 के लिए javascript interface generators प्रदान करता है।
मैं थोड़ी देर के लिए जावा और पायथन के लिए व्यापक रूप से SWIG का उपयोग कर रहा हूं, और एक बार जब आप समझते हैं कि 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;
}
};
आदेश नोड में इस वर्ग का उपयोग करने के लिए, आप बस निम्नलिखित बड़ा घूँट इंटरफ़ेस फ़ाइल लिखने में (mylib.i) :
{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}
भागो निम्नलिखित कमांडरों:
%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"
बाध्यकारी फ़ाइल binding.gyp बनाएं डी एस:
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
विधि का उल्लेख करना होगा, एसडब्ल्यूआईजी इन चीजों को खोजता है, और स्वचालित रूप से प्राकृतिक इंटरफेस उत्पन्न करता है।
यह अविश्वसनीय रूप से सरल दिखता है! काम के उदाहरण के लिए धन्यवाद –
इस उत्तर ने मुझे स्विग करने के लिए पेश किया, जो अद्भुत है। यह सभी एडन बॉयलरप्लेट कोड को स्वचालित करता है! सच्चा बनने के लिए तो यह बहुत अच्छा है। क्या यहां खेलने पर कुछ प्रकार के बड़े पैमाने पर प्रदर्शन व्यापार बंद है? – George
थोड़ी देर के लिए swig/node.js के साथ खेलने के बाद, ऐसा प्रतीत होता है कि स्विग सी ++ फ़ंक्शंस को संभाल नहीं सकता है जो सरणी लौटाता है (अधिक सटीक: कार्य जो पॉइंटर्स को सरणी में लौटाते हैं)। ऐसा लगता है कि ऐसा लगता है कि आप C++ में कोई फ़ंक्शन नहीं बना सकते हैं जो एक जावास्क्रिप्ट सरणी की तरह कुछ देता है और स्विग स्वचालित रूप से इसे आपके लिए परिवर्तित कर देता है। – George
Becareful बड़ा घूँट और सी के साथ ++: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8
सी ++ स्रोत फ़ाइलों पर बड़ा घूँट चल रहा है (एक सी या .cxx फ़ाइल में क्या प्रकट होता) अनुशंसित नहीं है। हालांकि एसडब्ल्यूआईजी सी ++ वर्ग घोषणाओं को पार्स कर सकता है, फिर भी यह घोषणाओं को अनदेखा करता है जो उनकी मूल श्रेणी परिभाषा से तय किए जाते हैं (घोषणाएं पार्स की जाती हैं, लेकिन बहुत से चेतावनी संदेश उत्पन्न किए जा सकते हैं)। उदाहरण के लिए:
/* Not supported by SWIG */ int foo::bar(int) { ... whatever ... }
यह एक सी ++ वर्ग केवल एक ज फाइल करने के लिए सीमित करने के लिए शायद ही कभी है।
इसके अलावा, स्विम का समर्थन करने वाले स्विग के संस्करण swig-3.0.1 या बाद में हैं।
मुझे समझ में नहीं आता कि एसडब्ल्यूआईजी 'foo :: bar' की परिभाषा के साथ क्या करेगा वैसे भी। कक्षा सदस्य की परिभाषा कार्यान्वयन के बारे में है; एसपीआईजी उत्पन्न करने वाले रैपर इंटरफ़ेस के बारे में हैं। – enobayram
- 1. मैं codebird.js ट्विटर लाइब्रेरी का उपयोग कैसे कर सकता हूं?
- 2. मैं Node.js का उपयोग कर दूरस्थ गिट शाखा कैसे प्राप्त कर सकता हूं?
- 3. मैं global.asax से Server.MapPath() का उपयोग कैसे कर सकता हूं?
- 4. मैं C# में स्ट्रिंग से "\ r \ n" कैसे हटा सकता हूं? क्या मैं regEx का उपयोग कर सकता हूं?
- 5. मैं Node.js परिनियोजन कैसे स्वचालित कर सकता हूं?
- 6. मैं C# का उपयोग कर स्थानीय मशीन स्टोर में प्रोग्राम प्रमाणपत्र कैसे स्थापित कर सकता हूं?
- 7. मैं C++ का उपयोग कर int में स्ट्रिंग कैसे कर सकता हूं?
- 8. मैं केवल एक बूस्ट लाइब्रेरी/फ़ाइल का उपयोग कैसे कर सकता हूं?
- 9. Node.js - मैं यूआरएल से पोर्ट को कैसे हटा सकता हूं?
- 10. मैं Node.js का उपयोग कर रैम डिस्क कैसे बना सकता हूं?
- 11. मैं बूस्ट लाइब्रेरी नामकरण को कैसे डीकोड कर सकता हूं?
- 12. मैं कॉफीस्क्रिप्ट में जावास्क्रिप्ट लाइब्रेरी कैसे आयात कर सकता हूं?
- 13. आईफोन: मैं gcov का उपयोग कैसे कर सकता हूं?
- 14. डीआईसीओएम छवियों से पिक्सल पढ़ने के लिए मैं क्या सी ++ लाइब्रेरी का उपयोग कर सकता हूं?
- 15. मैं समर्थन लाइब्रेरी का उपयोग न करने के क्षैतिज स्वाइप को कैसे कार्यान्वित कर सकता हूं?
- 16. पॉको सी ++ लाइब्रेरी का उपयोग करके, मैं डेटा को थ्रेड में कैसे पास कर सकता हूं?
- 17. रूबी स्प्रेडशीट लाइब्रेरी का उपयोग करके मैं एक विशिष्ट सेल को कैसे प्रारूपित कर सकता हूं?
- 18. आईओएस पर पीडीएफ एनोटेट करने के लिए मैं PoDoFo लाइब्रेरी का उपयोग कैसे कर सकता हूं?
- 19. मैं सी # में GetNextWindow() का उपयोग कैसे कर सकता हूं?
- 20. मैं एंड्रॉइड में टेस्सेक्ट का उपयोग कैसे कर सकता हूं?
- 21. मैं कच्चे_इनपुट का उपयोग कैसे कर सकता हूं?
- 22. मैं Google+ hangout चैट का उपयोग कैसे कर सकता हूं?
- 23. मैं वीआईएम का उपयोग कैसे कर सकता हूं .Net Development
- 24. मैं एचटीएमएल 5 का उपयोग कैसे कर सकता हूं?
- 25. मैं जावा में जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं?
- 26. मैं web2py में मॉड्यूल का उपयोग कैसे कर सकता हूं?
- 27. मैं EndRequest में ऑटोफैक का उपयोग कैसे कर सकता हूं?
- 28. मैं "।" का उपयोग कैसे कर सकता हूं जावा
- 29. मैं tnsname का उपयोग कर चींटी से ओरेकल डेटाबेस से कैसे कनेक्ट कर सकता हूं?
- 30. मैं JConsole का उपयोग कर दूरस्थ रूप से वेबलॉगिक से कैसे कनेक्ट कर सकता हूं?
कुंजी शब्द 'एक्सटेंशन' है। Google [C++ nodejs एक्सटेंशन] (https://www.google.co.uk/search?q=c%2B%2B+nodejs+extension) –
इस लिंक का अनुसरण करें। इसने एक नमूना कार्यक्रम प्रदान किया है और इसे चरण-दर-चरण समझाया है। http://www.benfarrell.com/2013/01/03/c-and-node-js-an-unholy-combination-but-oh-so-right/ –