【问题标题】:Node C++ Module Shared LibraryNode C++ 模块共享库
【发布时间】:2019-06-29 05:03:07
【问题描述】:

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

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

如何正确导入共享库?

【问题讨论】:

    标签: node.js shared-libraries node-gyp node-addon-api


    【解决方案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++ 输入需要为一些未知的文件夹启动一个级别原因。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 更改路径导致编译工作,但仍然无法找到库。用 require('./build/Release/steam.node') 测试它会导致错误:libsteam_api.so: cannot open shared object file: No such file or directory
      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多