クイックノート

ちょっとした発見・アイデアから知識の発掘を

gem install で "can't find header files" になる場合

rubyのパッケージ管理に便利なgemですが、
gem install でエラーに遭遇したので、
その対処方法をまとめておきます。

症状

sudo gem install [パッケージ名] を実行時に

ERROR: Failed to build gem native extension.     
 /usr/bin/ruby2.2 -r ./siteconf20190523-29430-1q1obmu.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

というエラーが表示されて、
パッケージのインストールが中断される。

対処策

header files がないと言われているので、
次のコマンドでruby-devをインストールします。

sudo apt install ruby2.2-dev

このとき、ruby2.2のバージョン部分は、
エラーメッセージの/usr/bin/ruby2.2のバージョンに合わせておきます。

このバージョン指定を省くと引き続き同様のエラーに遭遇することがあります。
詳しくは、この解決方法に到るまでの試行錯誤と一緒に後述します。

試行錯誤

ruby-dev のインストール

同様のエラーを検索するとよくある解決方法として、

sudo apt install ruby-dev を実行するというものがあります。

ruby-devはrubyの拡張モジュールを、
インストールするためのheader filesです。

なので、これをインストールすればエラー解決!
と思いきや、やはり、gem install で同じくcan't find header filesとなります。

rubyruby-devのバージョンを確認

インストールしたパッケージの一覧を表示して、
ruby-devのバージョンを確認して見ます。

dpkg -l | grep ruby を実行して見ると、

ii  ruby1.9.1-dev  1.9.3.484-2ubuntu1.14  amd64   Header files for compiling extension modules for the Ruby 1.9.1

なるほど、1.9.1のruby-devがインストールされたようです。

一方で、エラーメッセージに表示されているのは、
ruby2.2のheader filesが見つからないということですから、
上記の対応策のように明示的にバージョンを指定する必要があったようです。

まとめ

複数のバージョンが同時にインストールされうるようなものは、
ちゃんとバージョンを見ておく必要があるというのが、
今回の教訓でしょうか。

プライバシーポリシー