>每当我尝试使用 Ruby 的 C API(使用 rb_require(使用 gem 时,我都会收到"无法加载此类文件 --"错误,除非我使用完整路径。 要求宝石在常规红宝石脚本中工作正常。这些是我需要做的吗? 这些 gem 是使用捆绑器安装的。
当您从扩展调用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
一次并存储结果以避免多次调用。