不能在Ruby C扩展中使用Gems,除非我使用完整路径



>每当我尝试使用 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一次并存储结果以避免多次调用。

最新更新