Совместная библиотека модуля 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 изменяет текущий каталог во время работы, что делает недействительным ваш относительный путь. Вместо этого либо используйте абсолютный путь, либо поэкспериментируйте, чтобы найти новый текущий каталог, а затем используйте путь относительно этого.