我有一个像这样的 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,如下所示:
require 'benchmark'
我遇到了这个错误:
script.rb:1:in `require': cannot load such file -- benchmark (LoadError)
我如何从该脚本中获取基准测试?
最佳答案
我找到了两种方法来实现这一目标。
安装了 Ruby
就在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
这一次,有点棘手。在所需的第一个 ruby 脚本的开头,我们需要添加以下行:
$LOAD_PATH.unshift File.expand_path(File.join(__dir__, "/gems/"))
哪里"/gems/"
是存储 gem 的子文件夹。也许也可以从 C api 实现这一点,但它可能与 Ruby 中的一些 rb_funcall
相同。和rb_intern
因为加载路径相关的api是static
在 Ruby 源代码中。
关于c - 如何从 Ruby C VM 中加载的脚本中获取基准测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506937/