POPFile の日本語パーサーを KAKASI から MeCab に変更しようとして、 MeCab の Perl モジュールのロードができないことに気付いた。
インストールしているのは Ubuntu 20.04 の Universe リポジトリから apt でインストールした libmecab-perl 0.996-10build1 amd64 。
MeCab の Perl モジュールの状態を確認
$ perl -MMeCab -e '' Can't load '/usr/lib/x86_64-linux-gnu/perl5/5.30/auto/MeCab/MeCab.so' for module MeCab: /usr/lib/x86_64-linux-gnu/perl5/5.30/auto/MeCab/MeCab.so: undefined symbol: _ZN5MeCab6Tagger6createEiPPc at /usr/lib/x86_64-linux-gnu/perl/5.30/DynaLoader.pm line 193. at /usr/lib/x86_64-linux-gnu/perl5/5.30/MeCab.pm line 11. Compilation failed in require. BEGIN failed--compilation aborted.
どうやら Ubuntu 20.04 の libmecab-perl には問題があるらしい
エラーメッセージをもとに検索したところ、 Debian のバグレポートに「#961253 – libmecab-perl: Can’t load Perl module – Debian Bug report logs」というものを発見。
Debian におけるこのバグは mecab / libmecab-perl 0.996-13 で修正されているが、 Ubuntu 20.04 の mecab / libmecab-perl は 0.996-10 系列である
libmecab-perl/focal,now 0.996-10build1 amd64 [installed] mecab/focal,now 0.996-10build1 amd64 [installed]
が最新リリースのため、修正が反映されていないということなのだろう。
Ubuntu 21.04 の libmecab-perl では件のエラーは再現せず
Ubuntu 21.04 でインストール可能な mecab / libmecab-perl のバージョンを確認すると、
libmecab-perl/hirsute 0.996-14build3 amd64 mecab/hirsute 0.996-14build3 amd64
と 0.996-14 系列となっていたことから、両者をインストール後に試したところ、
$ perl -MMeCab -e '' $
と、件のエラーが再現しないことが確認できた。
さて、どうしたものか……としばらく考えたが、よくよく考えてみれば、 Ubuntu 20.04 環境でなければならない理由は何一つなかったため、サクッと Ubuntu 21.04 環境に必要な環境を構築し直し、問題解決ということにした。