1
2

More than 5 years have passed since last update.

rails5でgemのcabochaを使おうとするとエラーになる

Last updated at Posted at 2016-11-18

環境

AWS EC2
Ruby 2.3.1
Rails 5.0.0.1

エラー内容

unicornを起動しようとすると次のようなエラーで起動することができませんでした。

LoadError: libcabocha.so.5: cannot open shared object file: No such file or directory - /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/ca
bocha/CaboCha.so

対応したこと

とりあえずfindコマンドで検索

$ find / -name libcabocha.so.5 2>/dev/null
/usr/local/lib/libcabocha.so.5

存在を確認。

エラーが起きたファイルでロードされているライブラリを確認

$ ldd /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/cabocha/CaboCha.so 
    linux-vdso.so.1 =>  (0x00007fff77a6a000)
    libcabocha.so.5 => not found
    libcrfpp.so.0 => not found
    libmecab.so.2 => /usr/lib64/libmecab.so.2 (0x00007fdb28e16000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fdb28b11000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdb288f4000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fdb286f0000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fdb284b9000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fdb281b6000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fdb27df4000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdb27bde000)
    /lib64/ld-linux-x86-64.so.2 (0x000055a5f1199000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007fdb279db000)

libcabocha.so.5とlibcrfpp.so.0がnot foundになっていましたのでロードに失敗しています。

/etc/ld.so.confに/usr/local/libを追記

/etc/ld.so.confはライブラリをロードするときに参照するディレクトリを設定するファイルです。
デフォルトでは

  • /lib
  • /usr/lib
  • /etc/ld.so.confに記述されたディレクトリ

を参照すのですが、/usr/local/libが含まれていません。
/etc/ld.so.conf/usr/local/libを追記します。

ライブラリの依存関係情報を更新する

ldconfigコマンドを叩いてライブラリの依存関係を更新します。
このコマンドを叩くと/etc/ld.so.cacheが更新されます。

libcabocha.so.5がロードされているか確認

もう一度lddコマンドでライブラリがロードされているか確認します。

$ ldd /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/cabocha/CaboCha.so
    linux-vdso.so.1 =>  (0x00007ffcdd569000)
    libcabocha.so.5 => /usr/local/lib/libcabocha.so.5 (0x00007fcb1fd49000)
    libcrfpp.so.0 => /usr/local/lib/libcrfpp.so.0 (0x00007fcb1fb02000)
    libmecab.so.2 => /usr/local/lib/libmecab.so.2 (0x00007fcb1f73a000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fcb1f435000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcb1f218000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fcb1f014000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fcb1eddd000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fcb1eada000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fcb1e718000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fcb1e502000)
    /lib64/ld-linux-x86-64.so.2 (0x0000558070ff3000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007fcb1e2ff000)

libcabocha.so.5が参照できていることが確認できました。
libcrfpp.so.0も同じ場所にあったみたいです。
unicornも無事に起動することができました。

まとめ

パスが通っていないので環境変数PATHに/usr/local/libを追記したりしましたがうまくいかなかったです。
PATHはコマンド実行時に参照するものであって、ライブラリのロード時に参照されるものではないということがわかっただけでもいい勉強になりました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2