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 . 비동기 애드온을 작성하려면 Asyncworker
nan 클래스를 결합하면 됩니다.
다음은 Node.js를 사용하여 C ++를 웹에 가져 오는 흥미로운 기사입니다.
C ++ 코드를 Node.js 애플리케이션과 통합하는 세 가지 일반적인 방법-각 카테고리마다 많은 변형이 있지만 :
- 자동화-하위 프로세스에서 C ++를 독립형 앱으로 호출하십시오.
- 공유 라이브러리-C ++ 루틴을 공유 라이브러리 (dll)에 압축하고 Node.js에서 해당 루틴을 직접 호출하십시오.
- 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
'Programing' 카테고리의 다른 글
다운로드 한 글꼴을 해독하지 못했습니다 (0) | 2020.07.09 |
---|---|
Swing GUI를 가장 잘 배치하는 방법? (0) | 2020.07.09 |
winforms에 수평 디바이더 그리기 (0) | 2020.07.08 |
파이썬에서 문자열에서 숫자가 아닌 문자를 모두 제거 (0) | 2020.07.08 |
목록이 정렬되었는지 여부를 확인하는 Pythonic 방법 (0) | 2020.07.08 |