makeが通りません
transformerの勉強をしようと思ってその準備をしてjuman++をインストールしようとしたらmakeが通りませんでした。
環境がubuntu 22.04であることが原因のようです。しかしこれだけのために今更OSを古いものにするのはどうかと思うし、調べるのにちょっと時間もかかったので同じことで困ってる人がいたら助けになるかもしれないので自身の備忘録も兼ねて記録します。
Git cloneしてmakeしても使えない
Git cloneしてmakeでOKと思ったらそんなことはありません。それだと
Model file was not specified
こんなエラーがでます。モデルファイルがないそうです。
アーカイブを使う
色々な紹介記事1とか記事2 だとアーカイブからのインストール方法が書かれています。モデルファイルを含むのはこっちということのようです。300MBくらいありますし。上みたいなことになるので素直に従ったほうがよいです。ただしどちらもubuntuのバージョンが低いため22.04だとすんなり行きません。
インストールに使ったのは jumanpp-2.0.0-rc3.tar.xz アーカイブです。
京都大学黒橋・褚・村脇研究室のgitである
https://github.com/ku-nlp/jumanpp
の
Building from a package
Download the package from Releases
からいって
Assetsのところでダウンロードできます。
直リンクだと
https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc3/jumanpp-2.0.0-rc3.tar.xz
でした。
makeするとエラー
しかし紹介記事のように
$ tar xvf jumanpp-2.0.0-rc3.tar.xz
でtarを展開し
$ cd jumanpp-2.0.0-rc3/
$ mkdir build
$ cd build/
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
$ make
と進めるとコンパイルエラーが発生します。調べてみると原因はOSがubuntu22.04であることのようです。
ちなみにGit cloneしてmakeした場合にはコンパイルエラーは発生しません。その後修正がされたということなのでしょう。
1つめ SIGSTKSZ
In file included from /usr/include/signal.h:328,
from /home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/libs/catch.hpp:6434,
from /home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/testing/catch_main.cc:6:
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/libs/catch.hpp:6609:45: error: size of array ‘altStackMem’ is not an integral constant-expression
6609 | char FatalConditionHandler::altStackMem[SIGSTKSZ] = {};
| ^~~~~~~~
make[2]: *** [src/testing/CMakeFiles/jpp_test_catch_main_lib.dir/build.make:76: src/testing/CMakeFiles/jpp_test_catch_main_lib.dir/catch_main.cc.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:597: src/testing/CMakeFiles/jpp_test_catch_main_lib.dir/all] エラー 2
make: *** [Makefile:146: all] エラー 2
まずはこんな感じのエラーが出ます。
これは このlibs/catch.hppの6609行を
char FatalConditionHandler::altStackMem[32768] = {};
に置き換えると通るようになります。
2つめ numeric_limits
次はこれです。
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/util/serialization_test.cc: In function ‘void ____C_A_T_C_H____T_E_S_T____6()’:
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/util/serialization_test.cc:69:20: error: ‘numeric_limits’ is not a member of ‘std’
69 | auto nan1 = std::numeric_limits<float>::quiet_NaN();
| ^~~~~~~~~~~~~~
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/util/serialization_test.cc:69:35: error: expected primary-expression before ‘float’
69 | auto nan1 = std::numeric_limits<float>::quiet_NaN();
| ^~~~~
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/util/serialization_test.cc:74:19: error: ‘numeric_limits’ is not a member of ‘std’
74 | auto inf = std::numeric_limits<float>::infinity();
| ^~~~~~~~~~~~~~
/home/XXX/XXX/XXX/jumanpp-2.0.0-rc3/src/util/serialization_test.cc:74:34: error: expected primary-expression before ‘float’
74 | auto inf = std::numeric_limits<float>::infinity();
| ^~~~~
make[2]: *** [src/util/CMakeFiles/jpp_util_test.dir/build.make:216: src/util/CMakeFiles/jpp_util_test.dir/serialization_test.cc.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:545: src/util/CMakeFiles/jpp_util_test.dir/all] エラー 2
make: *** [Makefile:146: all] エラー 2
これはこの src/util/serialization_test.cc
の頭の方に
#include <limits>
を追加してやるだけです。他のヘッダのincludeでついでにincludeされてたのがされなくなったということなんでしょうね。
sudo make install
自分の場合、この2つの修正後makeは通るようになりました。warningが結構でてハラハラしましたが。warningもGit cloneだと1つとかしか出ないです。
その後は
sudo make install
で使えるようになりました。
$ echo "これでやっと通るようになりました。" | jumanpp
これ これ これ 指示詞 7 名詞形態指示詞 1 * 0 * 0 NIL
で で で 助詞 9 格助詞 1 * 0 * 0 NIL
やっと やっと やっと 副詞 8 * 0 * 0 * 0 "代表表記:やっと/やっと"
通る とおる 通る 動詞 2 * 0 子音動詞ラ行 10 基本形 2 "代表表記:通る/とおる 自他動詞:他:通す/とおす"
ように ように ようだ 助動詞 5 * 0 ナ形容詞 21 ダ列基本連用形 7 NIL
なり なり なる 接尾辞 14 動詞性接尾辞 7 子音動詞ラ行 10 基本連用形 8 "代表表記:なる/なる"
ました ました ます 接尾辞 14 動詞性接尾辞 7 動詞性接尾辞ます型 31 タ形 7 "代表表記:ます/ます"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS