Встраивание интерпретатора Ruby в C, SIGSEGV - PullRequest
2 голосов
/ 19 января 2012

Я пытаюсь привести пример встраивания интерпретатора ruby ​​из книги по программированию на Ruby. Но это все еще не работает. У меня установлен Ruby с RVM.

Мои исходные файлы: https://gist.github.com/1635374

Рубиновая версия:

    $ ruby -v
    ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

Расположение заголовочного файла Ruby:

    $ locate ruby.h
    ...
    /home/matej/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby.h
    /home/matej/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ruby/ruby.h
    ...

Расположение библиотек Ruby:

    $ locate libruby.so.1
    /home/matej/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9
    /home/matej/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9.1

Марка:

    $ make
    cc -I/home/matej/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/ -I/home/matej/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/i686-linux/ -g   -c -o embed2.o embed2.c
    cc -o embed2 embed2.o -shared  -L/home/matej/.rvm/rubies/ruby-1.9.2-p290/lib -ldl -lruby1.9

Запустить программу:

    $./embed2

Причины SIGSEGV.

Можете ли вы помочь мне, пожалуйста, найти, в чем проблема? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Попробуйте скомпилировать с дополнительными символами отладки (например, -ggdb при использовании GCC / GDB) и запустить вашу программу в отладчике, чтобы увидеть причину ошибки сегментации.

0 голосов
/ 19 января 2012

Я разобрался с проблемой после 2 часов потраченных на нее. -shared параметр вызвал это по какой-то причине. В примере с книгой этого параметра нет, и я добавил его из-за моих предыдущих проблем с загрузкой libruby. Это можно найти в make-файле, сделанном extconf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...