2013-09-05 12 views
5

Node.js 응용 프로그램에 외부 C++ 라이브러리 (헤더 파일과 .so 파일에 대한 액세스 권한이 있음)를 통합하려고합니다. .Node.js에서 C++ 라이브러리 호출 (노드 addons/node-ffi)

  1. 내가 말할 수 노드 FFI의 GitHub의의 정의에서을 Node addon

  2. 사용 node-ffi

작성 : 많은 연구 후

내 옵션에 감소 C++ 라이브러리에서 직접 작동하거나 작동하지 않는 경우 :

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

그래서 내가 가지고있는 질문은 다음과 같습니다

  • 옵션 1) 어떤 식 으로든 ++ 라이브러리 외부 C를 재 작성 의미합니까?
  • node-ffi는 C 래퍼없이 C++ 라이브러리를 직접 호출 할 수 있습니까?

저는 C/C++과 관련하여 전문가가 아니므로 답변을 드릴 수있는 기본 사항을 놓친 경우 알려 주시면 제 질문을 개선 할 수 있습니다.

+0

비슷한 질문이 있습니다. http://stackoverflow.com/questions/16783023/node-ffi-vs-node-extension-for-accessing-existing-c-functionality?rq=1 그러나 나는 그것이 내 질문에 완전히 대답하지 않는다고 생각한다. –

답변

4

node-ffi는 주로 C 프로그램 용인 것처럼 보입니다. 나는 지난 주에 이것을 경험했고 노드 애드온 (node ​​addons)과 함께 훨씬 더 나은 행운을 발견했다. 해야 할 일은 라이브러리의 C++ 코드와 node.js 사이에 shim을 작성하는 것입니다. 필자는 보안 프로토콜 용 패킷을 인코딩 및 디코드해야하므로 패킷을 포함하는 노드 버퍼를 작성하고 버퍼에서 데이터를 가져온 C++ 코드를 작성한 다음 인코딩 된 C 코드로 데이터를 보냈습니다. 디코딩 된 패킷.

이 페이지 : http://luismreis.github.io/node-bindings-guide/docs/returning.html에는 C++의 node.js 버퍼에서 데이터를 가져 오는 방법에 대한 훌륭한 예제가 있습니다.

+1

ffi는 C++에서 작동합니다. extern "C"를 사용하여 lib의 인터페이스를 정의합니다 (C++로 작성된 것과 마찬가지로 C에서도 사용할 수 있음). http://stackoverflow.com/questions/16783023/node-ffi를 참조하십시오. -vs-node-extension-for-existing-c-functionality? rq = 1 자세한 내용은 다음을 참조하십시오. – konsumer

2

다른 답변에는 무엇이 누락 되었습니까? 기꺼이 도와 드리겠습니다. 이 코드 예제는 C++로 작성되었습니다. 사람들이 (C 또는 C++로 라이브러리를 만드는) 사람들이 다른 사람들이 사용할 수있는 외부 인터페이스를 정의하는 방법을 설명하고 있습니다. ffi의 요점은 C/C++ (노드 확장의 경우처럼)가 아닌 사용중인 언어 (이 경우 자바 스크립트)로 래퍼를 작성한다는 것입니다. 원래 라이브러리가 다른 것들에서 사용되는 공유 DLL 인 경우, 이미 인터페이스가있다. 자바 스크립트에 래퍼 코드를 작성하여 C++로 무언가를 작성하고 기본 nodejs 라이브러리에 표시하는 대신 노드에 작동 방식을 알릴 필요가있다.

+0

https://github.com/rbranson/node-ffi/wiki/Node-FFI- 자습서는 sqlite의 몇 가지 방법을 래핑하는 예제입니다. lib가 C 또는 C++이라는 사실은 부적절합니다. 모든 공유 라이브러리와 마찬가지로 인터페이스를 정의합니다. – konsumer

2

이제 외부 C++ 라이브러리를 사용하여 Node.js 애드온을 쉽게 작성할 수 있습니다. 기본적으로 라이브러리 헤더, nbind 헤더 및 라이브러리의 클래스와 메소드를 나열하는 매크로 호출을 포함하여 새 소스 파일을 작성합니다. 그런 다음 nbind가 나머지 부분을 처리합니다.

libui-node은 nbind를 사용하여 Node.js의 기본 위젯과 함께 사용자 인터페이스를 생성하기 위해 libui을 호출하는 실제적인 예입니다. 또한 생물 정보학 관련 C++ 라이브러리 인 vg에 대한 바인딩을 만드는 방법이 있습니다.

0

라이브러리를 쉽게 연결할 수 있습니다 (.so .dll .a). 당신은 binging.gyp 파일에 올바른 경로와 라이브러리를 추가해야합니다

{ 
    "targets": [ 
    { 
     "target_name": "addon", 
     "sources": [ "hello.cc" ], 
     "libraries": [ 
      "path/toYourLibrary/yourLibName.dll or yourLibName.so" 
      ] 
    } 
    ] 
} 

는 또한 nan를 사용하여 좋은 애드온를 작성하는 더 간단한 방법이있다. 자세한 내용은 링크를 확인하십시오. github link