我正在尝试如何从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。
你能帮我找一下,问题出在哪里?提前谢谢。
答案 0 :(得分:3)
尝试使用其他调试符号进行编译(例如,如果使用GCC / GDB,则为-ggdb
)并在调试器中运行程序以查看导致分段错误的原因。
答案 1 :(得分:0)
我花了2个小时后才发现问题。 -shared
参数由于某种原因导致了它。在书的例子中没有这个参数,我添加了它,因为我以前的libruby加载问题。它可以在extconf
生成的makefile中找到。