1

我正在尝试使用 code::blocks 在 ubuntu 上构建一个节点 c++ 插件。我已经构建了一个依赖于另一个共享库 dep.so 的 addon.node 共享库。当创建我的基本 js 文件时

var addon = require(./addon.node);

它给

Error: dep.so: cannot open shared object file: No such file or directory
   at Error (native)
   at Module.load (module.js:357:32)
   at Function.Module._load (module.js:312:12)
   at Module.require (module.js:367:17)
   at require (module.js:386:17)
   at repl:1:13
   at REPLServer.defaultEval (repl.js:130:27)
   at bound (domain.js:254:14)
   at REPLServer.runBound [as eval] (domain.js:267:12)
   at REPLServer.<anonymous> (repl.js:277:12)

我的 dep.so 文件在构建 addon.node 时包含在与 addon.node 相同的构建目录中

运行 ld addon.node 它提供(除其他外)

ld: warning: dep.so, needed by addon.node, not found (try using -rpath or -rpath-link)
ld: warning: cannot find entry symbol _start; not setting start address
addon.node: undefined reference to `v8::ObjectTemplate::SetInternalFieldCount(int)'

所以,似乎我有两个问题:1)它找不到我自己创建的 dep.so 库 2)它找不到 v8 库(我想这需要以某种方式构建)

有什么建议如何让它工作吗?

干杯,迈克

4

1 回答 1

1

通常, nbind可以很容易地为库编写 Node.js 绑定,而libui-node是使用它创建跨平台原生 UI 的一个实际示例。它的binding.gyp文件显示了如何成功链接到一个名为的库,该库libui位于模块的根目录(而不是构建目录)中。

在 Windows 上:

"libraries": [
    "<(module_root_dir)/libui.lib"
]

Linux:

'ldflags': [
    '-Wl,-rpath,<(module_root_dir)',
],
"libraries": [
    "<(module_root_dir)/libui.so"
]

操作系统:

"xcode_settings": {
    "OTHER_LDFLAGS": [
        "-L<(module_root_dir)",
        "-lui",
        "-rpath",
        "<(module_root_dir)"
    ]
}
于 2016-11-28T03:05:03.623 回答