加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个代码不适用于ruby 1.9但适用于ruby 1.8?

发布时间:2020-12-16 19:06:25 所属栏目:百科 来源:网络整理
导读:我从 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.hint main()
我从 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.

问题是:当与ruby 1.8.7链接时,相同的代码工作正常.这有什么不对?

解决方法

请尝试将您的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宏.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读