Я пытаюсь создать собственный аддон c ++ для узла из кода, который был написан моим коллегой.
Он компилируется в file.node
, а затем падает, когда я пытаюсь использовать его в узле.
Я попытался предварительно собрать библиотеку, затем использовать library.dylib
, а также собрать ее вместе,node-gyp.
Оба эти подхода компилируются и выдают ошибку во время выполнения.
Что еще я могу сделать?
Я работаю над OSX Mojave.
Я проверил:
Как включить библиотеки c ++, чтобы узел-гип мог связываться?
dyld: lazy symbolОшибка привязки
Вся ошибка:
dyld: lazy symbol binding failed: Symbol not found:
__ZN3mds7computeERNSt3__16vectorINS1_IdNS0_9allocatorIdEEEENS2_IS4_EEEE
Referenced from: /.../node_folder/build/release/file.node
Expected in: flat namespace
Мой файл gyp:
{
"targets": [
{
"target_name": "name",
"sources": ["file.cc"],
"include_dirs": [
"<!(node -e \"require('nan')\")",
"/path/to/cpp/src/"
],
"link_settings": {
"libraries": ["-L/path/to/dylib/directory"]
},
"libraries": ["-L/path/to/dylib/directory"]
}
]
}
Мой package.json
{
...
"dependencies": {
"nan": "^2.12.1",
"node-gyp": "^3.8.0"
},
"scripts": {
"compile": "node-gyp rebuild",
"start": "node index.js"
},
"gypfile": true
}
Мой файл переплета:
#include <nan.h>
#include <iostream>
#include <my_header_file.h>
using namespace v8;
NAN_METHOD(compute)
{
if (!info[0]->IsArray())
{
Nan::ThrowTypeError("Argument myst be an array");
return;
}
...
std::vector<std::vector<double>> vector;
... (filling the vector with data)
//static std::vector<std::vector<double>> compute(std::vector<std::vector<double>> & distances_matrix);
mds::compute(vector);
}
NAN_MODULE_INIT(Initialize)
{
NAN_EXPORT(target, compute);
}
NODE_MODULE(addon, Initialize);