C 为什么这段代码不适用于ruby 1.9,而适用于ruby 1.8?

C 为什么这段代码不适用于ruby 1.9,而适用于ruby 1.8?,c,ruby,C,Ruby,我从ruby(1.9.2-p180)下载了最新的稳定ruby源代码,并使用MingW4.5.2-TDM和MSYS在Windows上编译。为了编译,我运行了sh configure和make。我得到的msvcrt-ruby191.dll和libmsvcrt-ruby191.dll完全符合预期。然后我写了这段代码: #include <ruby.h> int main() { ruby_init(); rb_funcall2(Qnil, rb_intern("p"), 1, (V

我从ruby(1.9.2-p180)下载了最新的稳定ruby源代码,并使用MingW4.5.2-TDM和MSYS在Windows上编译。为了编译,我运行了
sh configure
make
。我得到的msvcrt-ruby191.dll和libmsvcrt-ruby191.dll完全符合预期。然后我写了这段代码:

#include <ruby.h>
int main() {
  ruby_init();
  rb_funcall2(Qnil, rb_intern("p"), 1, (VALUE[]){INT2FIX(0)});
  ruby_finalize();
}

问题是:当与ruby 1.8.7链接时,相同的代码可以完美地工作。这里出了什么问题?

请尝试将您的初始化扩展到此:

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_堆栈
宏。

我找不到从C初始化RUBY的实际文档,但RUBY core及其周围有一些示例,例如,或google.com/codesearch?q=ruby\u init gdb回溯是什么
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()
}