【问题标题】:Missing functions in ruby 1.8ruby 1.8 中缺少的功能
【发布时间】:2011-02-20 17:17:56
【问题描述】:

我有一个使用 ruby​​ 1.9 开发的 ruby​​ gem,它可以工作。但是,对于 ruby​​ 1.8,当我尝试运行它时它会这样说:

dyld: lazy symbol binding failed: Symbol not found: _RBIGNUM_SIGN
  Referenced from: /Users/Adrian/Desktop/num_to_bytes/ext/num_to_bytes/num_to_bytes.bundle
  Expected in: flat namespace

dyld: Symbol not found: _RBIGNUM_SIGN
  Referenced from: /Users/Adrian/Desktop/num_to_bytes/ext/num_to_bytes/num_to_bytes.bundle
  Expected in: flat namespace

Trace/BPT trap

如果我注释掉使用RBIGNUM_SIGN 的行,它会抱怨像rb_big_modulo 这样的其他函数。有些事情有效,例如NUM2LONG。以下是我尝试过的一些事情:

  • http://github.com/ruby/ruby/blob/ruby_1_8_7/ruby.h 中定义了RBIGNUM_SIGN。但在我尝试过的所有 ruby​​ 版本中,它都不存在。
  • 我猜它可能是在不同的 .h 文件中定义的。知道 Hpricot 适用于 1.8,我查看了http://github.com/hpricot/hpricot/blob/master/ext/hpricot_scan/hpricot_scan.h。它不包含#define 它的任何其他文件。
  • extern VALUE rb_big_modulo(VALUE x); 之类的内容放在我的扩展程序的开头没有帮助。
  • 使用全新的 Ubuntu 安装,我 apt-getted ruby​​ 尝试安装 gem,但也没有成功。
  • have_library 'ruby', 'rb_big_modulo' 放入我的 extconf.rb 中不起作用。

正如您可能看到的,我越来越绝望(经过数周的尝试!)。那么,我怎样才能让它工作呢?

这是宝石:http://rubygems.org/gems/num_to_bytes

这里是来源:http://gist.github.com/404584

【问题讨论】:

    标签: c ruby include


    【解决方案1】:
    • 对于RBIGNUM_SIGN,在源代码中重新定义。
    • 对于rb_big_modulo(x, y),使用rb_funcall(x, '%', 1, y)

    【讨论】:

      【解决方案2】:

      您可以尝试要求 backports gem。这为旧版 ruby​​ 解释器提供了新版 ruby​​ 的一些功能。

      【讨论】:

      • 那是用红宝石写的。我正在尝试做一个 C 扩展。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2018-09-17
      • 2022-01-21
      相关资源
      最近更新 更多