Отсутствующие функции в 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.

Другие вопросы по тегам