gpt4 book ai didi

c - 为什么此代码不适用于 ruby​​ 1.9 但适用于 ruby​​ 1.8?

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:23 38 4
gpt4 key购买 nike

我从 ruby​​ website 下载了最新稳定的 ruby​​ 源代码(1.9.2-p180) 并使用 MinGW 4.5.2-TDM 和 MSYS 在 Windows 上编译它。为了编译,我运行了 sh configuremake。我完全按照预期获得了 msvcrt-ruby191.dlllibmsvcrt-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 版本之间发生了变化,因此现在需要在 block 中添加一个单独的嵌套 block { .. } 和一个 RUBY_INIT_STACK 宏。

关于c - 为什么此代码不适用于 ruby​​ 1.9 但适用于 ruby​​ 1.8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585610/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com