Электронное добавление: ошибка при инициализации DLL

Я пытаюсь связать свою библиотеку C ++ как родную надстройку с моим электронным приложением.
Я могу запустить пересборка node-gyp и создать успешный файл .node.

Но когда я пытаюсь вызвать его из main.js, я получаю сообщение об ошибке: «Библиотека динамических ссылок
(DLL) подпрограмма инициализации не удалась «.

Мой файл binding.gyp выглядит так:

{
'targets': [
{
# Usual target name/sources, etc.
'target_name': 'myclass',
'sources': [ 'myclass.cc', 'addon.cc' ],
'libraries': ["../libs/api.lib",
"../libs/core.lib",
"../libs/camera.lib",
"../libs/algo.lib",
"../libs/ComCtl32.lib",
"../../deps/windows/opencv/lib/x64/*.lib",
"../../deps/windows/tbb/lib/x64/*.lib"],
'include_dirs': ["<!(node -e \"require('nan')\")"],

'configurations': {
'Debug': {
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': '3' # /MDd
},
},
},
'Release': {
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': '2' # /MD
},
},
},
},
},],
}

Что может быть не так? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

5

Решение

Пара вещей может пойти не так …

х64 против х86

Вы должны убедиться, что вы правильно используете двоичные файлы x86 v x64. Например, двоичный файл x64 будет работать только на x64-версии узла. Я вижу, что вы напрямую ссылаетесь на некоторые библиотеки x64, вам, вероятно, нужно условно ссылаться на правильные библиотеки, основываясь на архитектуре, на которую вы нацелены. И затем убедитесь, что вы получаете правильную версию электрона.

Зависимые библиотеки

Убедитесь, что библиотеки, от которых вы зависите, находятся в нужных местах. В основном они должны быть в том же каталоге или рядом с исполняемым файлом, который пытается загрузить DLL.

Похоже, вы используете Windows, поэтому попробуйте использовать этот инструмент, чтобы открыть вашу DLL и посмотреть, каковы его зависимости depends.exe

Следует отметить, что когда вы перестраиваете с помощью node-gyp, который теперь dll будет открывать только в электронном режиме, вам нужно будет использовать магию, чтобы он также загружался в узел из командной строки без дальнейшей перекомпиляции.

Как вы на самом деле пытаетесь загрузить DLL?

Версии

Вы должны иметь точный правильные версии узла, электрона и узла-гипа. Тройной проверь их всех.

Я могу остановиться на любой из этих тем, если вам нужно больше деталей.

1

Другие решения

npm install -g prebuild

cd node_modules / ffi
prebuild -t 1.3.1 -r electron

cd node_modules / ref
prebuild -t 1.3.1 -r electron

«1.3.1» — версия электрона

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector