Text::MeCab を CentOS にインストールする際の注意
Text::MeCab 入れたいけどコケるのよ!!! という方に向けた記事のはずでしたが、
もはや Text::MeCab とか関係ない感じの記事になったことを報告します。
Mecab 自体のインストールについては言及しません。
以下に記すサイトが詳しいのでご参照下さい。
http://d.hatena.ne.jp/eth0jp/20130407/1365278478
結論
さて結論から言うとこうです。以下のどちらかをキメればなんとかなる場合が多い。
- LD_LIBRARY_PATH に `/usr/local/lib` *1 を加える
- `/etc/ld.so.conf.d/` 以下にconf ファイル (例えば local.conf というファイル) を配置し、そこに`/usr/local/lib` *2 を書き加える
なんだか、前者よりも後者の方が良い感じがします。
詳細な手順は後述します。
なお、今回の環境は以下のとおりですが、バージョン違っても大体は当てはまるのでは無いかと思います。
前説
今回はたまたま Text::MeCab を題材に取りましたが、別にこれは Text::MeCab に限った話ではありません。
CPAN には外部ツールをバインディングするモジュールが数多く存在します。
(そういうモジュールをインストールする時には、もちろんその外部ツールがインストールされている必要があります)
で、そうしたモジュールをインストールしようとすると、ときたま *3 「外部ツールをインストールしたはずなのに、動的ライブラリが無いって言われるワ」というエラーにぶち当たってインストールがコケる場合があります。
その際にはこんな感じのログが出ます (Text::MeCab の例)
Detected the following mecab information:
version: 0.996
cflags: -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=996 -I src
libs: -L/usr/local/lib -lmecab -lstdc++
include: /usr/local/include
/home/vagrant/.cpanm/work/1377188088.28582/Text-MeCab-0.20014/assertlibHocy6T8h: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
/home/vagrant/.cpanm/work/1377188088.28582/Text-MeCab-0.20014/assertlibsemL9gsi: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
wrong result: 'mecab', 'mecab'
- > N/A
- > FAIL Configure failed for Text-MeCab-0.20014. See /home/vagrant/.cpanm/work/1377188088.28582/build.log for details.
原因
特にオプションを付けずに MeCab をインストールすると、MeCab は `/usr/local/` 以下にインストールされます。
ところが、CentOSは `/usr/local/lib` をデフォルトで読み込んではくれません。すると悲劇が起こる。
(他の Linux ディストリビューションに関しては詳しく調べていないのでわかりません……)
だったら
普通に、動的ライブラリを読み込みに行くパスにソイツを追加してやればOK!!!!
解決策1: LD_LIBRARY_PATH に追加
以下のように、`/usr/local/lib` を LD_LIBRARY_PATH に追加するという方法があります。
$ echo 'export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc $ source ~/.bashrc
(.bashrc の部分は適宜環境にあわせて変更を加えて下さい)
解決策2: `/etc/ld.so.conf.d/` 以下にconf ファイルを配置する
あるいは、以下のように`/etc/ld.so.conf.d/` 以下にconf ファイル (今回は local.conf というファイル) を配置し、そこに`/usr/local/lib`を書き加えるという方法もあります。
# echo '/usr/local/lib' >> /etc/ld.so.conf.d/local.conf # ldconfig