Я пытаюсь связать свою библиотеку 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
},
},
},
},
},],
}
Что может быть не так? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Пара вещей может пойти не так …
Вы должны убедиться, что вы правильно используете двоичные файлы x86 v x64. Например, двоичный файл x64 будет работать только на x64-версии узла. Я вижу, что вы напрямую ссылаетесь на некоторые библиотеки x64, вам, вероятно, нужно условно ссылаться на правильные библиотеки, основываясь на архитектуре, на которую вы нацелены. И затем убедитесь, что вы получаете правильную версию электрона.
Убедитесь, что библиотеки, от которых вы зависите, находятся в нужных местах. В основном они должны быть в том же каталоге или рядом с исполняемым файлом, который пытается загрузить DLL.
Похоже, вы используете Windows, поэтому попробуйте использовать этот инструмент, чтобы открыть вашу DLL и посмотреть, каковы его зависимости depends.exe
Следует отметить, что когда вы перестраиваете с помощью node-gyp, который теперь dll будет открывать только в электронном режиме, вам нужно будет использовать магию, чтобы он также загружался в узел из командной строки без дальнейшей перекомпиляции.
Как вы на самом деле пытаетесь загрузить DLL?
Вы должны иметь точный правильные версии узла, электрона и узла-гипа. Тройной проверь их всех.
Я могу остановиться на любой из этих тем, если вам нужно больше деталей.
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» — версия электрона