如何让ruby mkmf识别修补函数?

时间:2014-02-27 23:14:09

标签: c ruby gem

我对使用ruby-prof感兴趣并且对它的内存分析方面特别感兴趣。我特意将它用于ruby 1.9.3-p484。我知道它需要一个补丁,并且基本上已经应用了this,尽管已经修改了p484。

Ruby编译/构建很好,我的irb for ruby​​环境具有在GC上定义的那些函数

irb(main):001:0> GC.malloc_allocations
=> 56769
irb(main):002:0> GC.malloc_allocated_size
=> 11939060

然后我尝试使用gem install ruby​​-prof(使用我的自定义ruby中的gem二进制文件)并安装得很好。但是,它运行的mkmf extconf拒绝识别修补的函数。 Irb证实了这一点。

irb(main):004:0> have_func("rb_gc_malloc_allocations")
checking for rb_gc_malloc_allocations()... no
=> false
irb(main):005:0> have_func("rb_gc_malloc_allocated_size")
checking for rb_gc_malloc_allocated_size()... no
=> false

我知道documentation for have_func表示它首先检查“常见”(不确定是什么意思)头文件或您要检查的任何其他头文件。 ruby-prof默认只检查公共头文件(在他们的extconf.rb中)。

不幸的是,我对C不太热。我错过了补丁的内容吗?我是否还需要在ruby标题中添加一些内容?我需要传递给gem install命令的一些标志,以便ruby-prof的extconf.rb找到合适的函数?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

所以,我终于想到了这一点(当然,在同事的帮助下)。事实证明,该函数确实需要在ruby标头中公开。我在问题中发布的补丁需要稍微调整以匹配ruby-prof所期望的(并在标题中公开函数)。

我已经提出here,希望它能帮助未来的知识寻求者。