Совместная библиотека модуля Node C ++ - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь создать модуль 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 ++:ошибка: ./steam/lib/linux64/libsteam_api.so: нет такого файла или каталога

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

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

После просмотра некоторых примеров и большого количества проб и ошибок я смог исправить 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 ++ при необходимости запуска одного уровня папки для некоторого неизвестного причина.

0 голосов
/ 29 июня 2019

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

...