Juman++ を ubuntu 22.04にインストール

# makeが通りません

transformerの勉強をしようと思ってその準備をしてjuman++をインストールしようとしたらmakeが通りませんでした。
環境がubuntu 22.04であることが原因のようです。しかしこれだけのために今更OSを古いものにするのはどうかと思うし、調べるのにちょっと時間もかかったので同じことで困ってる人がいたら助けになるかもしれないので自身の備忘録も兼ねて記録します。

# Git cloneしてmakeしても使えない
Git cloneしてmakeでOKと思ったらそんなことはありません。それだと

```
Model file was not specified
```
こんなエラーがでます。モデルファイルがないそうです。

# アーカイブを使う

色々な紹介[記事1](https://qiita.com/spiderx_jp/items/f0466705d1dda1a8c396)とか[記事2](https://qiita.com/Gushi_maru/items/ee434b5bc9f020c8feb6) だとアーカイブからのインストール方法が書かれています。モデルファイルを含むのはこっちということのようです。300MBくらいありますし。上みたいなことになるので素直に従ったほうがよいです。ただしどちらもubuntuのバージョンが低いため22.04だとすんなり行きません。

インストールに使ったのは jumanpp-2.0.0-rc3.tar.xz アーカイブです。

[京都大学黒橋・褚・村脇研究室](https://nlp.ist.i.kyoto-u.ac.jp/)の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

自分の場合、この２つの修正後makeは通るようになりました。warningが結構でてハラハラしましたが。warningもGit cloneだと１つとかしか出ないです。

その後は

```
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
```