programing

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

cafebook 2023. 9. 5. 20:47
반응형

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

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

이제 그 질문에 대한 새로운 답이 있습니다.SWIG는 버전 3.0부터 Node.js, Webkit 및 v8을 위한 Javascript 인터페이스 생성기를 제공하는 것으로 보입니다.

한동안 Java와 Python에 SWIG를 광범위하게 사용해 왔습니다. SWIG의 작동 방식을 이해하게 되면, SWIG가 지원하는 언어에 C++ 코드를 인터페이스하는 데 필요한 노력(대상 언어의 ffi 또는 동등한 것에 비해)이 거의 없습니다.

예를 들어, 내 클래스의 헤더가 있는 라이브러리가 있다고 가정해 보겠습니다.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)을 작성하기만 하면 됩니다.:

%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시공자 또는 그sayHelloSWIG는 어디서든 이러한 것들을 발견하고 자연스러운 인터페이스를 자동으로 생성합니다.

node-ffi를 보세요.

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

emscripten을 사용하여 C++ 코드를 js로 컴파일할 수 있습니다.

Node.js와 C++를 연결하는 새로운 방법이 있습니다.제발, 에서 약탈해요.

편집 가장 빠르고 쉬운 방법은 nbind입니다.비동기식 애드온을 작성하려는 경우 결합할 수 있습니다.Asyncworker난으로부터의 수업.

다음은 Node.js로 C++를 웹으로 가져오기에 대한 흥미로운 기사입니다.

C++ 코드를 Node.js 응용 프로그램과 통합하는 세 가지 일반적인 방법 - 각 범주에는 다양한 변형이 있습니다.

  1. 자동화 - 하위 프로세스에서 C++을 독립 실행형 앱으로 호출합니다.
  2. 공유 라이브러리 - C++ 루틴을 공유 라이브러리(dll)에 패킹하고 Node.js에서 해당 루틴을 직접 호출합니다.
  3. Node.js Addon - C++ 코드를 Node.js 모듈/addon 네이티브로 컴파일합니다.

linux/unix.node-cmd의 노드 프로그램을 사용하여 shelljs에서 c/c++ 프로그램 또는 공유 라이브러리를 호출해 보십시오.두 패키지 모두 기본적으로 터미널/명령줄에서 호출하는 것과 유사한 방식으로 c/c++ 프로그램을 호출할 수 있습니다.

Egin unbuntu:

const shell = require('shelljs');

shell.exec("command or script name");

창에서:

const cmd = require('node-cmd');
cmd.run('command here');

참고: shelljs 및 node-cmd는 운영 체제 명령을 실행하기 위한 것이며, c/c++에 국한되지 않습니다.

스위그와 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 이상입니다.

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

반응형