我有一个像这样设置的Ruby VM:
int ruby_state = 0;
ruby_init();
// some rb_define
rb_protect(rb_require, (VALUE)"./script.rb", &ruby_state);
ruby_cleanup(ruby_state);
我想在我的C函数上做一些基准测试。我尝试在script.rb
中添加需求,如下所示:
require 'benchmark'
我有这个错误:
script.rb:1:in `require': cannot load such file -- benchmark (LoadError)
如何从该脚本中获取基准?
答案 0 :(得分:0)
我找到了两种方法来实现这一目标。
在ruby_init()
之后,我需要添加ruby_init_loadpath()
。
int ruby_state = 0;
ruby_init();
ruby_init_loadpath(); // !IMPORTANT
// some rb_define
rb_protect(rb_require, (VALUE)"./script.rb", &ruby_state);
ruby_cleanup(ruby_state);
这一次,它有点棘手。在需要的第一个ruby脚本的开头,我们需要添加以下行:
$LOAD_PATH.unshift File.expand_path(File.join(__dir__, "/gems/"))
其中"/gems/"
是存储宝石的子文件夹。也许它也可以从C api实现,但它可能与Ruby中的rb_funcall
和rb_intern
相同,因为与加载路径相关的api是{{1在Ruby源代码中。