在C,SIGSEGV中嵌入Ruby解释器

时间:2012-01-18 20:53:56

标签: c ruby

我正在尝试如何从Programming Ruby book中嵌入ruby解释器。但它仍然无法正常工作。我安装了RVM的Ruby。

我的源文件:https://gist.github.com/1635374

Ruby版本:

    $ 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 个答案:

答案 0 :(得分:3)

尝试使用其他调试符号进行编译(例如,如果使用GCC / GDB,则为-ggdb)并在调试器中运行程序以查看导致分段错误的原因。

答案 1 :(得分:0)

我花了2个小时后才发现问题。 -shared参数由于某种原因导致了它。在书的例子中没有这个参数,我添加了它,因为我以前的libruby加载问题。它可以在extconf生成的makefile中找到。