Rubyでlibreadline.soに関するエラーを解決した方法

プログラミング
2019年12月07日 10:00

概要

Ruby on Railsのプログラムを書いていると、あるとき次のようなエラーが発生しました。

LoadError: libreadline.so.7: cannot open shared object file: No such file or directory

このエラーはrailsのコンソールを起動する時などに表示されました。

今回は、このエラーの解決方法を紹介します。

原因

エラーメッセージを見てみると、libreadline.so.7という共有オブジェクトファイルが存在しないということが分かります。
libreadline.so.7というファイルはOSの方でインストールしたパッケージに含まれている共有オブジェクトのため、そもそもなぜlibreadline.so.7という共有オブジェクトのファイルがなくなったのかを考えなければなりません。
おそらく、これはOSのアップデートをしたために、Readlineパッケージのバージョンが上がったのが原因と思われます。

Rubyではlibreadline.so.7というファイルの読み込みは、Rubyのインストール時に作成されるlibreadline.soというファイルから行われるようです。
つまり、Rubyのインストール時に生成されるlibreadline.soの方を修正すればエラーは解決します。

解決方法

libreadline.soはRubyのインストールで作成されるものなので、Rubyの再インストールをしてみました。

私は、rbenvを使っているので、次のコマンドでRubyの再インストールをしました。

rbenv install -f 2.6.3

私の環境では、Ruby 2.6.3で今回のエラーが発生したため、2.6.3を再インストールしています。
この部分は、適当に置き換えてください。

私の場合、これでエラーは解決しました。

最後に

OSのアップデートは、いろいろな部分が変わり、今回のような不具合を発生させることがあります。

同じようなエラーが発生している人の参考になれば幸いです。