node.js - 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
如何正确导入共享库?
解决方案
在查看了一些示例和大量试验和错误之后,我能够更正 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++ 输入因某种未知原因需要启动一个文件夹级别。
推荐阅读
- yosys - ghdl-yosys-plugin 编译失败
- javascript - 在 HTML 标头中将 CSS 添加到 Javascript 源?
- sql - 在 PostgreSQL 中检查行是否存在非常慢
- javascript - JavaScript 代码在 Firefox 中有效,但在 Chrome 或 Edge 中无效
- python - 如何使用 Beautifulsoap 抓取 svg
- javascript - 使用 Gremlin 查询图形
- python - 如何根据值阈值过滤和删除 dict 元素?
- java - 转换 Java HashMap
> 进入 C# - java - 使用 MouseAdapter 时如何获取第一个数据?
- python - 在 Mac 11.0.1 上运行 Django 站点的 AttributeError