在 C++ 中嵌入 Ruby 缺少“类”方法

Embedding Ruby in C++ missing "class" method

提问人:nyangostar 提问时间:11/16/2023 更新时间:11/20/2023 访问量:50

问:

我想就将 ruby 嵌入到 C++ 中的问题寻求您的帮助。 我正在从旧版本的 ruby 升级到 3.2 版。以前,我可以像往常一样打电话给ruby_init和ruby_init_loadpath,然后事情就会好起来,但现在我需要在打电话给ruby_init_loadpath之前先打电话给ruby_executable_node。

像这样的东西(ruby的参数是任意的):

char* opt[] = { "ruby", "-v", "-eputs 'Starting'" };
int status;
ruby_executable_node(ruby_options(3, opt), &status);

这似乎不是正确的做法,但除非我这样做,否则我所有的 ruby 对象都缺少类方法(错误是未定义的方法“class”)。我浏览了 ruby 的更新日志,但找不到与此更改相关的任何内容。 有谁知道为什么会发生这种情况,或者是否有解决方法?

谢谢

C++ 嵌入式 Ruby

评论


答:

1赞 Max 11/20/2023 #1

根据这个例子,你可以传递参数,让 Ruby 在传递选项时不执行任何代码。听起来这可以解决您的问题。"-e "

评论

0赞 nyangostar 11/21/2023
你好马克斯,非常感谢你的链接。我尝试传递“-e”并且它起作用了(即,我得到与以前相同的结果),但仍然不确定为什么需要调用 ruby_executable_node 和 ruby_options。调用这些时是否进行了一些额外的初始化?我看到ruby_init_stack在ruby_options中调用,但我在ruby_init之前调用它(通过RUBY_INIT_STACK宏)。我在示例中注意到的另一件事是对 ruby_exec_node 的调用,但实际上即使不调用它,我的 ruby 代码也会被执行。
0赞 Max 11/22/2023
@nyangostar这是个好问题,我不知道。我创建了我在回答中链接到的网站,正如你所看到的,如果你只是打电话,它肯定曾经工作过。我为自己记录了一个错误来调查它 github.com/silverhammermba/emberb/issues/27 如果您发现任何问题,请告诉我!ruby_init
0赞 nyangostar 11/22/2023
啊,这是你的向导!非常感谢您的指导!当然,如果我发现任何东西,我会在这里更新。