Подтвердить что ты не робот

Как я могу использовать библиотеку С++ из node.js?

Как я могу использовать библиотеку С++ из node.js?

4b9b3361

Ответ 1

Посмотрите node-ffi.

node -ffi - это аддон Node.js для загрузки и вызова динамических библиотек с использованием чистого JavaScript. Его можно использовать для создания привязок к родным библиотекам без написания кода на С++.

Ответ 2

Теперь есть новый ответ на этот вопрос. SWIG, с версии 3.0, как представляется, генераторы интерфейса javascript для Node.js, Webkit и v8.

Я использую SWIG для Java и Python некоторое время, и как только вы понимаете, как работает SWIG, почти нет усилий (по сравнению с ffi или эквивалентом на целевом языке), необходимых для взаимодействия кода на С++ с языки, которые поддерживает SWIG.

В качестве небольшого примера, скажем, у вас есть библиотека с заголовком 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;
        }
};

Чтобы использовать этот класс в node, вы просто пишете следующий файл интерфейса 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

Теперь, запустив node из той же папки, вы можете сделать:

> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5

Несмотря на то, что нам нужно было написать два файла интерфейса для такого небольшого примера, обратите внимание на то, что нам не нужно упоминать конструктор MyClass или метод sayHello в любом месте, SWIG обнаруживает эти вещи и автоматически генерирует естественные интерфейсы.

Ответ 3

Вы можете использовать расширение node.js для предоставления привязок для вашего кода на С++. Вот один учебник, который охватывает это:

http://syskall.com/how-to-write-your-own-native-nodejs-extension

Ответ 4

Вы можете использовать emscripten для компиляции кода на С++ в js.

Ответ 5

Появились новые способы подключения Node.js и С++. Пожалуйста, loot at Nan.

ИЗМЕНИТЬ Самый быстрый и простой способ - nbind. Если вы хотите написать асинхронное дополнение, вы можете комбинировать класс Asyncworker от nan.

Ответ 6

Вот интересная статья о том, как получить ваш C++ в Интернете с помощью Node.js

три общих способа интеграции кода C++ с приложением Node.js - хотя в каждой категории существует множество вариаций:

  1. Автоматизация - вызовите C++ в качестве автономного приложения в дочернем процессе.
  2. Общая библиотека - упакуйте подпрограммы C++ в общей библиотеке (dll) и вызовите эти процедуры из Node.js напрямую.
  3. Node.js Addon - скомпилируйте ваш C++ код как родной модуль/аддон Node.js.

Ответ 7

Будьте осторожны с swig и С++: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8

Запуск SWIG в исходных файлах на С++ (что бы появлялось в файле .C или .cxx) не рекомендуется. Несмотря на то, что SWIG может анализировать объявления класса С++, он игнорирует объявления, которые отделяются от их первоначального определения класса (объявления анализируются, но может генерироваться много предупреждающих сообщений). Например:

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

Редко, чтобы класс С++ ограничивался только одним файлом .h.

Кроме того, версии swig, поддерживающие JavaScript, являются swig-3.0.1 или новее.