首页 > 解决方案 > Node C++ 模块共享库

问题描述

我正在尝试创建一个 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

如何正确导入共享库?

标签: node.jsshared-librariesnode-gypnode-addon-api

解决方案


在查看了一些示例和大量试验和错误之后,我能够更正 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++ 输入因某种未知原因需要启动一个文件夹级别。


推荐阅读