Call C++ library from Node.js (Node addons / node-ffi)

Miki de Arcayne picture Miki de Arcayne · Sep 5, 2013 · Viewed 16.9k times · Source

I'm trying to integrate an external C++ library (I have access to the .so file as well as the header files) into my Node.js application.

After a lot of research my options are reduced to:

  1. Writing a Node addon

  2. Use node-ffi

From node-ffi's gitHub's definition I can't tell if it will or will not work directly on C++ libraries:

node-ffi is a Node.js addon for loading and calling dynamic libraries using pure JavaScript. It can be used to create bindings to native libraries without writing any C++ code.

So the questions I have are:

  • Does option 1) imply rewriting in some way the external C++ library?
  • Is node-ffi able to call directly to C++ libraries without any kind of C wrapper I'd have to write?

I'm no expert when it comes to C/C++ so if I missed something basic for you to be able to answer please let me know so I can improve my question.

Answer

Christopher Dow picture Christopher Dow · Feb 25, 2014

node-ffi seems to be primarily for C programs. I went through this in the last week, and found much better luck with node addons. What you have to do is write a shim between the C++ code in the library and node.js. In my case, I needed to encode and decode packets for a security protocol, so I made node buffers that contained the packets, and wrote C++ code that got the data out of the buffers, then send the data to my C code that encoded and decoded packets.

This page: http://luismreis.github.io/node-bindings-guide/docs/returning.html has some great examples of how to get data in and out of node.js buffers in C++.