как добавить зависимость к статической библиотеке в binding.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

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


person Alex Netkachov    schedule 11.09.2013    source источник


Ответы (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"
],

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

person Ale    schedule 24.10.2016

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

"библиотеки": [ "/usr/local/lib/libnetfilter_queue.so.1.3.0" ]

person Val    schedule 19.11.2013
comment
Кажется, что путь в библиотеках должен быть абсолютным путем, это правда? - person Vimos; 17.10.2014
comment
@Vimos, вы можете написать так: библиотеки: [-Wl,-rpath, mylib.a] . Это может сработать. - person alex_kael; 10.09.2015