태그 보관물: node.js

node.js

node.js에서 C ++ 라이브러리를 어떻게 사용합니까? C ++ 라이브러리를

node.js에서 C ++ 라이브러리를 어떻게 사용합니까?



답변

노드 FFI .

node-ffi는 순수 JavaScript를 사용하여 동적 라이브러리를로드하고 호출하기위한 Node.js 애드온입니다. C ++ 코드를 작성하지 않고 기본 라이브러리에 대한 바인딩을 작성하는 데 사용할 수 있습니다.


답변

그 질문에 대한 새로운 해답이 있습니다. SWIG 버전 3.0 현재 Node.js, Webkit 및 v8에 대한 자바 스크립트 인터페이스 생성기 를 제공하는 것으로 보입니다 .

Java 및 Python에 SWIG를 광범위하게 사용하고 있으며 SWIG의 작동 방식을 이해하면 C ++ 코드를 SWIG 언어와 인터페이스하는 데 필요한 노력이 거의 없습니다 (대상 언어의 ffi 또는 이에 상응하는 언어와 비교). 지원합니다.

작은 예로, 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 ++를 연결하는 새로운 방법이 있습니다. 에서 약탈하십시오 .

편집은
가장 빠르고 쉬운 방법입니다 nbind . 비동기 애드온을 작성하려면 Asyncworkernan 클래스를 결합하면 됩니다.


답변

다음은 Node.js를 사용하여 C ++를 웹에 가져 오는 흥미로운 기사입니다.

C ++ 코드를 Node.js 애플리케이션과 통합하는 세 가지 일반적인 방법-각 카테고리마다 많은 변형이 있지만 :

  1. 자동화-하위 프로세스에서 C ++를 독립형 앱으로 호출하십시오.
  2. 공유 라이브러리-C ++ 루틴을 공유 라이브러리 (dll)에 압축하고 Node.js에서 해당 루틴을 직접 호출하십시오.
  3. 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 이상입니다.