我正在尝试创建一个Node模块,用于与Steam C++接口。库文件是./steam/lib/linux64/libsteam_api.so,头文件在./steam中。
我已经创建了一个用于测试的小型常规C++文件,它成功地使用了使用#include "steam_api.h"导入的Steam api。我像这样编译并导入了共享库: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-gyp编译Node模块时,我得到错误: g++:./steam/lib/linux64/libsteam_api.so:没有这样的文件或目录
如何正确导入共享库?
发布于 2019-07-01 11:22:06
在看了一些示例和大量的试验和错误之后,我能够纠正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++输入的不同之处在于,出于某种未知的原因,需要启动一个文件夹级别。
发布于 2019-06-29 13:07:04
看起来node-gyp在运行时更改了当前目录,这会使您的相对路径无效。或者使用绝对路径,或者进行一些实验来查找新的当前目录,然后使用相对于该目录的路径。
https://stackoverflow.com/questions/56815192
复制相似问题