dyld: привязка ленивого символа не удалась: символ не найден.Ожидается в: плоское пространство имен - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь создать собственный аддон 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);

1 Ответ

0 голосов
/ 06 апреля 2019

Вы должны перейти в корневую папку и rm -rf node_modules/, затем npm install, которая должна исправить это для вас.

...