Programing

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

crosscheck 2020. 7. 9. 08:08
반응형

node.js에서 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 개의 인터페이스 파일을 작성해야했지만 SWIG 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

Running SWIG on C++ source files (what would appear in a .C or .cxx file) is not recommended. Even though SWIG can parse C++ class declarations, it ignores declarations that are decoupled from their original class definition (the declarations are parsed, but a lot of warning messages may be generated). For example:

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

It's rarely to have a C++ class limited to only one .h file.

Also, the versions of swig supporting JavaScript is swig-3.0.1 or later.

참고URL : https://stackoverflow.com/questions/9629677/how-can-i-use-a-c-library-from-node-js

반응형