Совместная библиотека модуля Node C++

Я пытаюсь создать модуль Node C++ для взаимодействия с API Steam. Файл библиотеки находится в./steam/lib/linux64/libsteam_api.so, а файлы заголовков находятся в./steam.

Я создал небольшой обычный файл C++ для тестирования, который успешно использует API Steam, импортированный с помощью #include "steam_api.h", Я собрал и импортировал разделяемую библиотеку следующим образом: g++ -L./steam/lib/linux64 -Wl,-rpath=./steam/lib/linux64 -Isteam -lsteam_api main.cpp

binding.gyp:

{
 "targets": [ {
  "target_name": "steam",
  "sources": [ "steam.cpp" ],
  "include_dirs": [
   "steam",
   "<!@(node -p \"require('node-addon-api').include\")"
  ],
  "cflags!": [ "-fno-exceptions" ],
  "cflags_cc!": [ "-fno-exceptions" ],
  "libraries": [ "./steam/lib/linux64/libsteam_api.so" ]
 } ]
}

Когда я пытаюсь скомпилировать модуль Node с помощью node-gyp, я получаю g++: error: ./steam/lib/linux64/libsteam_api.so: такого файла или каталога нет

Как правильно импортировать разделяемую библиотеку?

2 ответа

После просмотра некоторых примеров и большого количества проб и ошибок я смог исправить binding.gpy:

{
 "targets": [ {
  "target_name": "steam",
  "sources": [ "steam.cpp" ],
  "include_dirs": [
   "steam",
   "<!@(node -p \"require('node-addon-api').include\")"
  ],
  "cflags!": [ "-fno-exceptions" ],
  "cflags_cc!": [ "-fno-exceptions" ],
  "libraries": [
   "-lsteam_api",
   "-L../steam/lib/linux64",
   "-Wl,-rpath=./steam/lib/linux64"
  ]
 } ]
}

Раздел библиотек должен был включать аргументы, аналогичные тому, как они вызывались в g ++, за исключением того, что "-L" отличался от "-Wl,-rpath=" и входных данных g ++, необходимых для запуска одного уровня папки по неизвестной причине.

Похоже, что node-gyp изменяет текущий каталог во время работы, что делает недействительным ваш относительный путь. Вместо этого либо используйте абсолютный путь, либо поэкспериментируйте, чтобы найти новый текущий каталог, а затем используйте путь относительно этого.

Другие вопросы по тегам