1

我正在尝试创建一个 Node C++ 模块来与 Steam api 交互。库文件是./steam/lib/linux64/libsteam_api.so,头文件在./steam。

我创建了一个小的常规 C++ 文件进行测试,它成功使用了 Steam api,使用#include "steam_api.h". 我已经像这样编译并导入了共享库:g++ -L./steam/lib/linux64 -Wl,-rpath=./steam/lib/linux64 -Isteam -lsteam_api main.cpp

绑定.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++: error: ./steam/lib/linux64/libsteam_api.so: No such file or directory

如何正确导入共享库?

4

2 回答 2

1

在查看了一些示例和大量试验和错误之后,我能够更正 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-07-01T03:22:06.377 回答
0

看起来 node-gyp 在运行时正在更改当前目录,这会使您的相对路径无效。要么改用绝对路径,要么做一些实验来找到新的当前目录,然后使用相对于该目录的路径。

于 2019-06-29T05:07:03.813 回答