构建时的 node-gyp 链接库依赖项
Posted
技术标签:
【中文标题】构建时的 node-gyp 链接库依赖项【英文标题】:node-gyp link library dependencies at build time 【发布时间】:2015-06-28 16:05:24 【问题描述】:我的nodejs
插件使用cares
库,而我的binding.gyp
具有指向此的dependencies
属性。现在每当我必须运行addon
时,我都必须导出LD_LIBRARY_PATH
变量。
有没有办法可以在binding.gyp
中进行配置,这样每次我都不必设置LD_LIBRARY_PATH
。 (在构建时链接)
binding.gyp 中的依赖设置:"dependencies": [ "deps/cares/cares.gyp:cares" ]
Ex 导出:export LD_LIBRARY_PATH=build/Release
【问题讨论】:
可能与***.com/a/16216870/1938163有关 @MarcoA。是的。我用相对路径和绝对路径尝试了libraries
-L 选项,但没有运气:(
这是我收到的错误消息:Library not loaded: @rpath/cares.dylib
在 Mac 上 "libraries": [ "-rpath ./build/Release/" ]
为我工作,但奇怪的是它不适用于 Linux(Ubuntu)。错误消息:unrecognized command line option rpath
。 Linux 中的 rpath 有什么替代方案吗?
【参考方案1】:
"libraries": [ "-Wl,-rpath,./build/Release/" ]
在 Mac 和 Linux(Ubuntu) 上为我工作。
【讨论】:
更好的"libraries": [ "-Wl,-rpath,<!(pwd)/build/Release/" ]
。即使我使用 npm 安装,这也可以工作。(通过执行 pwd 自动设置绝对路径)但在 Windows 上不起作用。奇怪的预定义变量PRODUCT_DIR
对我不起作用。 "libraries": [ "-Wl,-rpath,<(PRODUCT_DIR)" ]
【参考方案2】:
我已经成功地使用以下binding.gyp
行在 Ubuntu 和 Debian 中获得了相对路径:
"libraries": [ "../lib/somelib/somelib.a" ]
我的文件夹结构如下:
|--binding.gyp
|--app.cc
|--lib
|--somelib
|--somelib.a
我从这里得到了方法(有点间接): https://github.com/nodejs/node-gyp/issues/49
【讨论】:
【参考方案3】:我对@987654321@ 的回答似乎也适用于这里,并且应该是跨平台的。
简而言之,它使用module_root_dir
并构建一个绝对路径。
示例:
"libraries": [
"-lcares",
"-L<(module_root_dir)/build/Release/"
]
【讨论】:
这帮助我解决了我的问题 :-)以上是关于构建时的 node-gyp 链接库依赖项的主要内容,如果未能解决你的问题,请参考以下文章
即使从 package.json 中删除,node-gyp 也会尝试构建依赖项