Я пытаюсь использовать пользовательский пакет узлов, который я написал в приложении Electron, и у меня возникают проблемы с инициализацией получающегося пакета DLL / Node. Когда я запускаю свое приложение Electron, я получаю следующую ошибку:
Uncaught Error: A dynamic link library (DLL) initialization routine failed.
Связываемая DLL — это простая библиотека, написанная на C ++, которая имеет одну функцию, которая принимает в качестве входных данных двойное число и просто добавляет к нему одну, возвращая результат. Для сборки библиотеки C ++ я использую SWIG (http://www.swig.org/) и node-gyp с помощью следующих команд:
swig -c++ -javascript -node ./src/mace_api.i
node-gyp clean configure build
mace_api — это пакет, который я пытаюсь собрать. mace_api.i, файл binding.gyp и исходные файлы для моей библиотеки определены следующим образом:
%module MaceAPI
%{
#include "./mace_api.cpp"%}
%include <windows.i>
%include "./mace_api.h"
{
"targets": [
{
"target_name": "mace-api",
"sources": [ "./src/mace_api_wrap.cxx" ]
}
]
}
#ifndef MACE_API_H
#define MACE_API_H
#include <iostream>
#include <functional>
using namespace std;
class MaceAPI
{
public:
MaceAPI();
double addOne(double input);
};
#endif // MACE_API_H
#include "mace_api.h"
MaceAPI::MaceAPI()
{
}
double MaceAPI::addOne(double input)
{
double ret = input + 1.0;
return ret;
}
SWIG берет исходные файлы C ++ и в основном пишет оболочку, которая может использоваться, в данном случае, node-gyp для сборки пакета Node. Кто-нибудь пытался использовать собственный модуль Node, встроенный таким образом, в приложение Electron? Я что-то упускаю из-за того, как SWIG создает оболочку для моей библиотеки C ++, или как Electron обрабатывает пользовательские пакеты Node? Я могу связать библиотеку с Node, но не с Electron. Любая помощь будет оценена.
Для полноты ниже я пытаюсь включить и использовать свой пакет в приложении Electron:
var libMaceTest= require('mace-api/build/Release/mace-api');
var test = new libMaceTest.MaceAPI();
console.log(test.addOne(5));
В частности,
Ручная сборка для Electron
Если вы разработчик разрабатывает собственный модуль и хотите его протестировать
против Electron, вы можете пересобрать модуль для Electron
вручную. Вы можете использовать node-gyp непосредственно для сборки для Electron:
cd /path-to-module/ HOME=~/.electron-gyp node-gyp rebuild
--target=1.2.3 --arch=x64 --dist-url=https://atom.io/download/atom-shell
HOME = ~ / .electron-gyp меняет, где искать заголовки разработки.
—target = 1.2.3 — это версия Electron. —Dist-url = … указывает, где загружать заголовки. —Arch = x64 говорит, что модуль построен
для 64-битной системы.
Других решений пока нет …