У меня есть рубиновый камень, который я разработал с помощью 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
. Вот некоторые вещи, которые я пробовал:
- In 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
ted ruby попытался установить гем, но он тоже не сработал.
- Вставка
have_library 'ruby', 'rb_big_modulo'
в мой extconf.rb не сработала.
Как вы, наверное, видите, я впадаю в отчаяние (после нескольких недель попыток!). Итак, как мне заставить это работать?
Вот этот камень: http://rubygems.org/gems/num_to_bytes
Вот источник: http://gist.github.com/404584