缺少ruby中的函数1.8

时间:2010-05-18 04:02:20

标签: c ruby include

我有一个红宝石宝石,我用ruby 1.9开发,它有效。但是,对于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已定义。但是在我试过的所有版本的红宝石中,都没有。
  • 我猜测它可能是在一个不同的.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-get ted ruby​​,尝试安装gem,但它也不起作用。
  • have_library 'ruby', 'rb_big_modulo'放在我的extconf.rb中无效。

正如你可能看到的那样,我正在绝望(经过几周的尝试!)。那么,我怎样才能让它发挥作用呢?

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

以下是来源:http://gist.github.com/404584

2 个答案:

答案 0 :(得分:0)

你可以尝试要求backports宝石。这为旧的ruby解释器提供了一些新的ruby版本的功能。

答案 1 :(得分:0)

  • 对于RBIGNUM_SIGN,请在源代码中再次定义。
  • 对于rb_big_modulo(x, y),请使用rb_funcall(x, '%', 1, y)