如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖
Posted
技术标签:
【中文标题】如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖【英文标题】:how to add dependence to static library in binding.gyp node-gyp for node.js extension 【发布时间】:2013-09-15 21:25:50 【问题描述】:我有一个简单的 binding.gyp 文件来构建我的 node.js 扩展。我想改变库“mylib”的链接方法,静态链接而不是使用共享库。
"targets": [
"target_name": "myext",
"sources": [
"code/main.cpp",
"code/load.cpp",
"include/load.h"
],
"include_dirs": [
"include", "../Library/include"
],
"libraries": [
"-lmylib", "-L/home/admin/MyLib/Library/binaries/linux/Release"
],
"cflags!": [ "-fno-exceptions" ],
"cflags": [ "-std=c++11" ],
"cflags_cc!": [ "-fno-exceptions" ]
]
mylib 的静态和共享版本在同一目录下:
# ls /home/admin/MyLib/Library/binaries/linux/Release
libmylib.a libmylib.so
我想静态链接以避免库安装/加载问题。
【问题讨论】:
【参考方案1】:您可以让 node-gyp 使用内置变量 module_root_dir
为您插入路径
如果我正确解释了您的代码,请将您的 libraries
更改为例如:
"libraries": [
"-lmylib",
"-L<(module_root_dir)/../Library/binaries/linux/Release"
],
可能会成功。虽然我不确定它是否会与.a
或.so
版本链接,但指定您可以尝试:
"libraries": [
"<(module_root_dir)/../Library/binaries/linux/Release/libmylib.a"
],
带有out -L
前缀和-lmylib
。此外,我有点不确定是否允许您遍历根目录。我之前没有使用模块根目录上方的任何东西进行测试。除此之外,您应该一切顺利。
【讨论】:
【参考方案2】:只需在“库”部分添加静态 .a 或 .so 文件的路径,
“库”:[“/usr/local/lib/libnetfilter_queue.so.1.3.0”]
【讨论】:
看来“库”中的路径应该是绝对路径,是这样吗? @Vimos,你可以这样写: "libraries": [ "-Wl,-rpath, mylib.a" ] 。这可以工作。以上是关于如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖的主要内容,如果未能解决你的问题,请参考以下文章
在Linux 环境 运行 node-gyp configure 出错了,在线求助