17

我有一个简单的 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

我想静态链接以避免库安装/加载问题。

4

2 回答 2

9

您可以让 node-gyp 使用内置变量为您插入路径module_root_dir 如果我正确解释了您的代码,请将您的代码更改libraries为例如:

"libraries": [
    "-lmylib",
    "-L<(module_root_dir)/../Library/binaries/linux/Release"
],

可能会成功。虽然我不确定它是否会与.aor.so版本链接,但要指定您可以尝试:

"libraries": [
    "<(module_root_dir)/../Library/binaries/linux/Release/libmylib.a"
],

没有-L前缀-lmyliband 。_ 此外,我有点不确定是否允许您遍历根目录。我之前没有使用模块根目录上方的任何东西进行测试。除此之外,您应该很高兴。

于 2016-10-24T15:55:52.923 回答
6

只需在“库”部分添加静态 .a 或 .so 文件的路径,

“库”:[“/usr/local/lib/libnetfilter_queue.so.1.3.0”]

于 2013-11-19T06:20:31.533 回答