我从
ruby
website(1.9.2-p180)下载了持续稳定的ruby源代码,并在Windows上用MinGW 4.5.2-TDM和MSYS编译.要编译我运行sh configure和make.我完全按照预期获得了msvcrt-ruby191.dll和libmsvcrt-ruby191.dll.a.然后我写了这段代码:
#include <ruby.h> int main() { ruby_init(); rb_funcall2(Qnil,rb_intern("p"),1,(VALUE[]){INT2FIX(0)}); ruby_finalize(); }
我用g编译,链接到ruby的dll.当我运行可执行文件时,我收到此错误消息:
<main>: [BUG] Segmentation fault ruby 1.9.2p180 (2011-02-18 revision 30909) [i386-mingw32] -- control frame ---------- c:0002 p:---- s:0004 b:0004 l:000003 d:000003 CFUNC :p c:0001 p:0000 s:0002 b:0002 l:00120c d:00120c TOP --------------------------- -- Ruby level backtrace information ---------------------------------------- ruby:0:in `p' [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
解决方法
请尝试将您的init扩展到:
int main(int argc,char *argv[]) { ruby_sysinit(&argc,&argv); { RUBY_INIT_STACK; ruby_init(); ruby_init_loadpath(); // ... code ruby_finalize(); } return 0; //from main() }
初始化过程在1.8和1.9版本之间进行了更改,因此现在需要在块中添加单独的嵌套块{..}和RUBY_INIT_STACK宏.