【问题标题】:node c++ addon / v8 / custom dependencynode c++插件/v8/自定义依赖
【发布时间】:2014-06-30 09:39:56
【问题描述】:

我正在尝试使用 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库(我想这需要以某种方式构建)

有什么建议可以让它工作吗?

干杯,迈克

【问题讨论】:

    标签: c++ node.js linker v8 node.js-addon


    【解决方案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)"
        ]
    }
    

    【讨论】:

    • 这是正确答案,这里的关键是指定 -rpath 和 libraries 一起收集
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2020-05-20
    • 2021-12-02
    • 1970-01-01
    • 2013-12-25
    • 2013-09-25
    相关资源
    最近更新 更多