为什么gem不能自动编译我的C扩展

时间:2013-09-12 13:23:07

标签: ruby makefile gem ruby-c-extension ruby-ffi

我构建了一个Ruby gem,它需要一些C扩展。这个 - 曾经编译过 - 通过Ruby FFI绑定到gem。

我的设置:我使用bundle作为宝石脚手架。在我的gems文件夹中,我有一个子文件夹ext。这个包括一个静态Makefile,另一个子文件夹source和一个extconf.rb。

source文件夹包含所有.c和.h文件。

不必动态创建Makefile。如果我在make clean && make中调用ext,则所有内容都会编译,并且gem会按预期运行。

现在我给extconf.rb提供以下内容:

require 'mkmf'
require 'fileutils'

# Give it a name
extension_name = 'somename'

# The destination
dir_config extension_name

# Do the work
create_makefile extension_name

# Overwrite Makefile
FileUtils.cp 'Makefile.template', 'Makefile'

所以我先让mkmf创建一个Makefile,然后用我的静态模板覆盖它。笨

当我现在通过rake build构建我的gem并尝试将其安装在另一台机器上时,扩展程序不会被编译。

任何人都可以告诉我,为了在安装时自动编译扩展程序,我必须做些什么?

此致 菲利克斯

1 个答案:

答案 0 :(得分:3)

由于Neil Slater的暗示,解决方案很简单:我的gemspec文件中没有gem.extension,如下所示:

s.extensions    = %w[ext/extconf.rb]

对于任何面临同样问题的人。