每当我尝试使用Ruby的C API(使用rb_require)时,我会得到一个“无法加载此类文件 - ”错误,除非我使用完整路径。要求宝石在常规ruby脚本中正常工作。这些东西我需要做什么吗?这些宝石是使用Bundler安装的。
答案 0 :(得分:0)
当您从扩展程序中调用rb_require
时,您正在调用核心“内置”进程,以便在Ruby中要求文件。这会绕过Rubygems替换Kernel#require
方法时添加的Gem处理代码。
为了获得正确的gem处理,你需要调用普通的require
方法,并让通常的方法调度将调用路由到Rubygems代码。你可以用:
rb_funcall(rb_cObject, rb_intern("require"), 1, rb_str_new_cstr("the_gem"));
您可以拨打rb_intern
一次并存储结果,以避免在需要时多次调用。