Отсутствующие функции в ruby 1.8
У меня есть рубиновый драгоценный камень, который я разработал с 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
определено. Но во всех версиях 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-get
Тед Руби попытался установить драгоценный камень, и он тоже не работал. - Ввод
have_library 'ruby', 'rb_big_modulo'
в моем extconf.rb не работает.
Как вы, наверное, видите, я впадаю в отчаяние (после нескольких недель попыток!). Итак, как я могу заставить это работать?
Вот этот драгоценный камень: http://rubygems.org/gems/num_to_bytes
Вот источник: http://gist.github.com/404584
2 ответа
- За
RBIGNUM_SIGN
определите это снова в источнике. - За
rb_big_modulo(x, y)
использоватьrb_funcall(x, '%', 1, y)
,
Вы могли бы попытаться потребовать драгоценный камень backports. Это обеспечивает некоторые функциональные возможности более новых версий ruby для старых интерпретаторов ruby.