「ruby extconf.rb」で「can't find header files for ruby」エラー

2008/09/23

Rubyの拡張モジュールをインストールしようとまず「ruby extconf.rb」でMakefileを作ろうとしたところ、

can't find header files for ruby.

というエラーになりました(Rubyのバージョンは1.8.6)。

調べてみると、extconf.rbの先頭でrequireするmkmfライブラリの中に以下のような箇所があり、

117 if not $extmk and File.exist?(Config::CONFIG["archdir"] + "/ruby.h")
118   $hdrdir = $topdir = Config::CONFIG["archdir"]
119 elsif File.exist?(($top_srcdir ||= topdir)  + "/ruby.h") and
120     File.exist?(($topdir ||= Config::CONFIG["topdir"]) + "/config.h")
121   $hdrdir = $top_srcdir
122 else
123   abort "can't find header files for ruby."
124 end

ruby.hがないとこのエラーになることが分かりました。

ruby.hは僕が使っているFedora 9ではruby-develパッケージに含まれるので、

% sudo yum install ruby-devel

にて同パッケージをインストールしたところ、エラーが出なくなりました。

尚、ruby.hは/usr/lib/ruby/1.8/i386-linux/ruby.hに配置されます。

今まで1年以上Rubyを使ってきましたが、同様の方法で拡張モジュールをインストールしたことがなかったようです。