【发布时间】: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 中不起作用。
正如您可能看到的,我越来越绝望(经过数周的尝试!)。那么,我怎样才能让它工作呢?
【问题讨论】: