Как добавить зависимость от статической библиотеки в bind.gyp node -gyp для расширения node.js

У меня есть простой файл binding.gyp для создания моего расширения node.js. Я хочу изменить метод связывания библиотеки "mylib" и связать ее статически вместо использования разделяемой библиотеки.

{
  "targets": [
    {
      "target_name": "myext",
      "sources": [
        "code/main.cpp",
        "code/load.cpp",
        "include/load.h"
      ],
      "include_dirs": [
        "include", "../Library/include"
      ],
      "libraries": [
        "-lmylib", "-L/home/admin/MyLib/Library/binaries/linux/Release"
      ],
      "cflags!": [ "-fno-exceptions" ],
      "cflags": [ "-std=c++11" ],
      "cflags_cc!": [ "-fno-exceptions" ]
    }
  ]
}

Статические и общие версии mylib находятся в одном каталоге:

# ls /home/admin/MyLib/Library/binaries/linux/Release
libmylib.a libmylib.so

Я хочу связать статически, чтобы избежать проблем с установкой/загрузкой библиотеки.

Ответ 1

Просто добавьте путь к статическому файлу .a или .so в разделе "libraries",

"libraries": [ "/usr/local/lib/libnetfilter_queue.so.1.3.0" ]

Ответ 2

У вас может быть node -gyp вставить путь для вас со встроенной переменной module_root_dir Если я правильно интерпретирую ваш код, изменив ваш libraries на, например:

"libraries": [
    "-lmylib",
    "-L<(module_root_dir)/../Library/binaries/linux/Release"
],

может сделать трюк. Хотя я не уверен, что он свяжется с версией .a или .so, чтобы указать, что вы можете попробовать:

"libraries": [
    "<(module_root_dir)/../Library/binaries/linux/Release/libmylib.a"
],

с out префиксом -L и -lmylib. Более того, я немного не уверен, если вам разрешено проходить через корневой каталог. Я раньше не тестировал ничего над корневым каталогом модуля. Помимо этого вам должно быть хорошо идти.