【问题标题】:Cause of "dyld: lazy symbol binding failed: Symbol not found:" error from ZMQ build?“dyld:惰性符号绑定失败:未找到符号:”ZMQ 构建错误的原因?
【发布时间】:2016-03-06 10:03:10
【问题描述】:

我正在 OSX 10.9.5 上本地开发 Meteor 应用程序。

我收到此错误:

 dyld: lazy symbol binding failed: Symbol not found: _node_module_register

我相信它与 zmq 包有关。更多关于错误的信息:

Referenced from: /Users/user/node_modules/zmq/build/Release/zmq.node

我试过了:

除非绝对必要,否则我宁愿不测试可能的问题(因为它需要完全升级。我使用的是旧计算机。):

Warning: Error: dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush

Git > dyld: lazy symbol binding failed: Symbol not found: _iconv_open

在较新版本的 OSX 下编译的 zmq? (我使用的是 10.9.5。除非绝对必要,否则升级不是一个可行的选择。)

如果这是问题......

Handling "dyld: lazy symbol binding failed: Symbol not found" error when nm does not find symbol

...我如何将库静态链接到 zmq???

完整的错误:

=> App running at: http://localhost:3000/
W20151202-10:02:42.764(2)? (STDERR) dyld: lazy symbol binding failed: Symbol not found: _node_module_register
W20151202-10:02:42.766(2)? (STDERR)   Referenced from: /Users/user/node_modules/zmq/build/Release/zmq.node
W20151202-10:02:42.766(2)? (STDERR)   Expected in: dynamic lookup
W20151202-10:02:42.766(2)? (STDERR) 
W20151202-10:02:42.767(2)? (STDERR) dyld: Symbol not found: _node_module_register
W20151202-10:02:42.767(2)? (STDERR)   Referenced from: /Users/user/node_modules/zmq/build/Release/zmq.node
W20151202-10:02:42.767(2)? (STDERR)   Expected in: dynamic lookup
W20151202-10:02:42.767(2)? (STDERR) 
=> Exited from signal: SIGTRAP

我已经尝试解决这个问题超过一天了。任何帮助将不胜感激。

【问题讨论】:

  • 您是否安装了多个版本的 Node 并以 root 身份运行安装,而以普通用户身份运行应用程序(反之亦然)?
  • 我测试了使用 sudo meteor 运行应用程序。我认为应该将其作为根运行。我仍然遇到同样的错误。我将如何检查反向?我相信流星加载nodjs??所以meteor会用sudo meteor将nodjs作为root加载来启动应用???
  • 您需要确保zmq 模块是使用 Meteor 提供的 Node.js 构建的(我相信 Meteor 随附,它不使用单独安装的 Node.js。 js)。我也不知道现在 Node 包与 Meteor 的集成情况如何(过去非常困难,虽然我自己从未使用过 Meteor,所以我可能在撒谎......)。或者,由于 Meteor 使用的是 Node v0.10.40,如果你安装了特定版本的 Node 来尝试构建 zmq,它可能会工作。
  • 为了测试这一点,我继续完全卸载了 nodjs 和流星。我都重新安装了。然后从一个干净的应用程序开始。在做任何其他事情之前,我使用了 npm install zmq。然后我添加了有问题的代码“var zeromq = Npm.require('zmq');”在启动时执行。我得到与以前完全相同的错误。
  • 这个测试能排除zmq build和meteor build是一样的吗?

标签: node.js meteor npm zeromq npm-install


【解决方案1】:

我对这个错误的理解是,用于安装/运行 node.js 代码的节点版本不匹配。

我遇到了这个问题,因为我使用节点 5 安装了 npm,但我的运行配置是节点 0.11.something。

我将运行配置切换为使用节点 5,问题就消失了。

【讨论】:

  • 这也为我修复了它。不得不从 Node v10 切换到 Node v12,错误消失了。
【解决方案2】:

我可以通过删除 node_modules 文件夹然后运行来解决这个问题

$ meteor npm install

【讨论】:

    【解决方案3】:

    (对cmets的回顾,对于其他感兴趣的人;由于我没有任何实际的Meteor经验,我的解决方案可能是错误的,在这种情况下,请随时纠正我:)

    Meteor 带有自己的一组 nodenpm 可执行文件。如果你想使用依赖于addons 的Node 模块,比如zmq,你需要确保这些模块与Meteor 提供的可执行文件一起安装;否则,您可能会遇到问题(尽管如果您安装与 Meteor 使用的相同版本的 Node,它可能会起作用,这似乎是 node@0.10.40npm@1.4.28,尽管我不知道 Meteor 可执行文件是否“普通”节点/npm 或者如果它们已修补)。

    可执行文件可以在.meteor 目录中找到。对于 OS X,它们位于~/.meteor/packages/meteor-tool/1.1.10/mt-os.osx.x86_64/dev_bundle/bin/(尽管版本号可能会有所不同,我想)。

    一种确保使用 Meteor 可执行文件而不是全局安装的 Node/npm 的简单方法,您可以将该目录添加到 $PATH 的开头:

    $ export PATH=~/.meteor/packages/meteor-tool/1.1.10/mt-os.osx.x86_64/dev_bundle/bin/:$PATH
    

    之后,在同一个 shell 会话中,nodenpm 现在应该指向 Meteor 提供的版本,您可以使用它们安装插件:

    $ npm install zmq
    

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 2013-04-30
      • 2011-03-19
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多