在构建时,node-gyp链接库依赖项

18
我的 nodejs 插件使用 cares 库,我的 binding.gyp 文件有一个 dependencies 属性指向它。现在每当我要运行 addon 时,都必须导出 LD_LIBRARY_PATH 变量。
是否可以在 binding.gyp 中配置,以便每次不必设置 LD_LIBRARY_PATH。(在构建时链接) binding.gyp 的依赖项设置为:"dependencies": [ "deps/cares/cares.gyp: cares" ] 例如:export LD_LIBRARY_PATH=build/Release

可能与https://dev59.com/qGQo5IYBdhLWcg3wOtQC#16216870相关。 - Marco A.
@MarcoA。是的,没错。我尝试使用相对路径和绝对路径来使用“libraries” -L选项,但都没有成功:( - Royal Pinto
这是我收到的错误消息:Library not loaded: @rpath/cares.dylib - Royal Pinto
在Mac上,"libraries": [ "-rpath ./build/Release/" ] 对我有用,但奇怪的是在Linux(Ubuntu)上不起作用。错误信息:unrecognized command line option rpath。在Linux中是否有任何替代rpath的方法..? - Royal Pinto
3个回答

18

"libraries": [ "-Wl,-rpath,./build/Release/" ]

这在Mac和Linux(Ubuntu)上都适用。


2
更好的方法是 "libraries": [ "-Wl,-rpath,<!(pwd)/build/Release/" ]。即使我使用npm进行安装,这种方法也能正常工作(通过执行pwd自动设置绝对路径),但在Windows上无法工作。奇怪的是,预定义变量PRODUCT_DIR对我没有起作用。 "libraries": [ "-Wl,-rpath,<(PRODUCT_DIR)" ] - Royal Pinto
2
请尝试使用-Wl,-rpath,<(module_root_dir)/build/Release/代替<!(pwd)... - bmacnaughton

8

这帮助我解决了我的问题 :-) - intumwa

3

我曾经在Ubuntu和Debian中成功地使用以下binding.gyp行获取了相对路径:

"libraries": [ "../lib/somelib/somelib.a" ]

我的文件夹结构如下:

|--binding.gyp
|--app.cc
|--lib
   |--somelib
      |--somelib.a

我(间接地)从这里得到了方法: https://github.com/nodejs/node-gyp/issues/49

注:该内容涉及it技术,请根据上下文理解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接