嵌入CRuby脚本引擎的一个历史遗留问题和解决方案

最近又需要嵌入CRuby,又遇到了这个问题,

主要是当使用net/http等socket相关的库时,会提示找不到read_nonblock方法。

这个问题的解决方案很简单,补充一个定义即可

但是使用ruby或者irb时就没有这个问题,为什么呢

(这也不是操作系统相关的问题,虽然我用的是windows)

irb下通过IO.instance_method(:read_nonblock).source_location可以发现这个方法的定义在一个叫”<internal:prelude>”的文件中定义,显然是内部自己的奇怪操作。

这个定义可以通过ruby_init_options函数来初始化,然而。

然而经过搜索发现这个函数一直有人提出,将它导出作为feature,结果从1.9到2.4都没有实行,这个函数直到现在,现成编译的版本从未导出符号。

所以,现在初始化ruby解释器,如果不想从源码修改去掉函数的static存储类关键字这里开始,一个比较合适的写法是:

 

 

嵌入CRuby脚本引擎的一个历史遗留问题和解决方案》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注