C 为什么这段代码不适用于ruby 1.9,而适用于ruby 1.8?
我从ruby(1.9.2-p180)下载了最新的稳定ruby源代码,并使用MingW4.5.2-TDM和MSYS在Windows上编译。为了编译,我运行了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
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()
}