Linux 将棋ソフト「技巧」のビルド

2020年11月3日
manjaro

 Linux ディストリビューションである manjaro で将棋ソフト「技巧」をビルドする方法について書いてみる。まず、GitHub の技巧のページより、git コマンドを用いてソースコードをダウンロードする。

$ git clone https://github.com/gikou-official/Gikou.git
Cloning into 'Gikou'...
remote: Enumerating objects: 288, done.
remote: Total 288 (delta 0), reused 0 (delta 0), pack-reused 288
Receiving objects: 100% (288/288), 430.17 KiB | 278.00 KiB/s, done.
Resolving deltas: 100% (153/153), done.
$ ls
./  ../  Gikou/
$ cd Gikou
$ ls
./  ../  .git/  Copying.txt  Makefile  README.md  gikou_ja.txt  src/

 Gikou というディレクトリが作成されるのでそのディレクトリに cd コマンドで移動し、以下の make コマンドを実行すれば release という実行ファイルが生成される。

$ make release

 技巧は、USI プロトコル将棋所将棋GUIなどの将棋盤ソフトと指し手のやり取りをするが、現時点の manjaro の g++ の最新バージョン 10.2.0 で技巧のソースコードをビルドすると下記のように USI プロトコルの通信の最中で Segmentation fault (コアダンプ) を起こしてしまう。ビルド時に警告メッセージがたくさん出力されていた。

$ ./release
usi
id name Gikou 2 (v2.0.2)
id author Yosuke Demura
option name BookFile type filename default book.bin
option name BookMaxPly type spin default 20 min 0 max 50
option name ByoyomiMargin type spin default 100 min 0 max 10000
option name DepthLimit type spin default 100 min 1 max 100
option name DrawScore type spin default 0 min -200 max 200
option name FischerMargin type spin default 12000 min 0 max 60000
option name MinThinkingTime type spin default 1000 min 10 max 60000
option name MultiPV type spin default 1 min 1 max 700
option name NarrowBook type check default false
option name OwnBook type check default true
option name ResignScore type spin default -10000 min -32600 max -500
option name SuddenDeathMargin type spin default 60 min 0 max 600
option name Threads type spin default 16 min 1 max 64
option name TinyBook type check default false
usiok
isready
readyok
usinewgame
position startpos moves 7g7f
go
info time 0 depth 32 nodes 737 score cp 0 multipv 2 pv 8c8d
info time 0 depth 32 nodes 13495 score cp 0 multipv 1 pv 3c3d
info time 0 depth 32 nodes 13495 score cp 0 multipv 1 pv 3c3d
bestmove 3c3d
position startpos moves 7g7f 3c3d 7f7e
go
info time 0 depth 32 nodes 10055 score cp 0 multipv 1 pv 5a4b
info time 0 depth 32 nodes 10055 score cp 0 multipv 1 pv 5a4b
bestmove 5a4b
position startpos moves 7g7f 3c3d 7f7e 5a4b 7e7d
go
info depth 1 seldepth 1 time 3 nodes 6873 nps 2291000 hashfull 0 score cp 346 multipv 1 pv 7c7d
info depth 2 seldepth 2 time 4 nodes 7928 nps 1982000 hashfull 0 score cp 281 multipv 1 pv 7c7d 2g2f
info depth 3 seldepth 3 time 4 nodes 8870 nps 2217500 hashfull 0 score cp 281 multipv 1 pv 7c7d 2g2f 4b3b
info depth 4 seldepth 4 time 4 nodes 9924 nps 2481000 hashfull 0 score cp 281 multipv 1 pv 7c7d 2g2f 4b3b 2f2e
info depth 5 seldepth 5 time 5 nodes 16970 nps 3394000 hashfull 0 score cp 316 multipv 1 pv 7a6b 2g2f 7c7d 2f2e 4a3b
info depth 6 seldepth 6 time 6 nodes 24271 nps 4045166 hashfull 0 score cp 278 multipv 1 pv 7c7d 2g2f 2b8h+ 7i8h 3a2b 2f2e
info depth 7 seldepth 7 time 7 nodes 30324 nps 4332000 hashfull 0 score cp 301 multipv 1 pv 7c7d 2g2f 4a3b 2f2e 2b8h+ 7i8h 3a2b
info depth 8 seldepth 8 time 9 nodes 44572 nps 4952444 hashfull 0 score cp 362 multipv 1 pv 7c7d 2h7h 7a6b 7h7d 6b7c 7d7h 2b8h+ 7i8h
info depth 9 seldepth 10 time 12 nodes 61324 nps 5110333 hashfull 0 score cp 258 multipv 1 pv 7c7d 2h7h 7a6b 7h7d 6b7c 7d7c+ 8a7c 8h2b+ 3a2b P*7d
info depth 10 seldepth 13 time 18 nodes 98389 nps 5466055 hashfull 1 score cp 321 multipv 1 pv 7c7d 2h7h 7a7b 7h7d 7b7c 7d7h 4b3b 5i4h 8c8d P*7d 7c6d
info depth 11 seldepth 13 time 22 nodes 120479 nps 5476318 hashfull 1 score cp 307 multipv 1 pv 7c7d 2h7h 7a7b 7h7d 7b7c 7d7h 4b3b 5i4h 8c8d 4h3h 8d8e P*7d 7c6d
info depth 12 seldepth 18 time 52 nodes 308253 nps 5927942 hashfull 4 score cp 260 multipv 1 pv 7c7d 2h7h 4a3b 7h7d 2b8h+ 7i8h B*6e 7d7g 6e4g+ 3i3h 4g5g B*5e 3a2b P*5h
info depth 13 seldepth 19 time 91 nodes 560791 nps 6162538 hashfull 9 score cp 195 multipv 1 pv 7c7d 2h7h 4a3b 7h7d 2b8h+ 7i8h B*6e B*5f 6e7d 5f7d 7a6b 5i4h 6a7b 7d5f 6c6d
info depth 14 seldepth 24 time 116 nodes 750923 nps 6473474 hashfull 13 score cp 223 multipv 1 pv 7c7d 2h7h 4a3b 7h7d 2b8h+ 7i8h B*6e 7d7h 6e4g+ 3i3h 4g4f 8h7g 8b7b 5i4h 7a6b 6i5h 4f6d 4h3i 6d5d
info depth 15 seldepth 24 time 132 nodes 886061 nps 6712583 hashfull 15 score cp 223 multipv 1 pv 7c7d 2h7h 4a3b 7h7d 2b8h+ 7i8h B*6e 7d7h 6e4g+ 3i3h 4g4f 8h7g 8b7b 5i4h 7a6b 6i5h 4f6d 4h3i 6d5d B*5f 5d8g 6g6f
info depth 16 seldepth 26 time 210 nodes 1514292 nps 7210914 hashfull 26 score cp 296 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 3h2h 6b6c 7i6h 1c1d 6h6g 1d1e 6g5f
info depth 17 seldepth 26 time 257 nodes 1891937 nps 7361622 hashfull 33 score cp 306 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 7i6h 6b6c 6h6g 1c1d 1g1f 2c2d 3h2h 2b3c 3i3h
info depth 18 seldepth 26 time 282 nodes 2103305 nps 7458528 hashfull 37 score cp 269 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 3h2h 6b6c 7i6h 6a5b 6h6g 1c1d 6g5f 1d1e 6i5h 8c8d 3i3h 8d8e 6f6e
info depth 19 seldepth 26 time 328 nodes 2453494 nps 7480164 hashfull 44 score cp 269 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 3h2h 6b6c 7i6h 6a5b 6h6g 1c1d 3i3h 1d1e 6i5h 8c8d 6g5f 8d8e 6f6e
info depth 20 seldepth 26 time 407 nodes 3083871 nps 7577078 hashfull 55 score cp 269 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 4h3h 7a6b 3h2h 6c6d 6g6f 6b6c 7i6h 6a5b 6h6g 1c1d 3i3h 1d1e 6i5h 8c8d 6g5f 8d8e 6f6e 6d6e
info depth 21 seldepth 26 time 571 nodes 4394992 nps 7697008 hashfull 78 score cp 268 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 7i6h 6b6c 6h6g 6a5b 3h2h 1c1d 6g5f 1d1e 3i3h 6c5d 6i5h 8c8d 4g4f 2c2d 5f4e
info depth 22 seldepth 28 time 830 nodes 6410840 nps 7723903 hashfull 117 score cp 269 multipv 1 pv 7c7d 2h7h 4a3b 5i4h 8b7b 6g6f 7a6b 4h3h 6c6d 7i6h 6b6c 6h6g 6a5b 3h2h 1c1d 3i3h 1d1e 6i5h 2c2d 4g4f 2b3c 6g5f 8c8d 8h7g 7d7e
Segmentation fault (コアダンプ)

 ネットで検索したところ、g++ のバージョン 4.9 ではうまく動作しているようだったので manjaro でも gcc49 パッケージを yay コマンドでインストールした。この作業は、gcc をソースコードからビルドするので非常に時間がかかる。

$ yay -S gcc4.9
 -> 必要なパッケージを全て確認することができません:
        gcc4.9 (対象)
[nakada@kderyzen]$ yay -S gcc49 
:: 3 個のパッケージが gcc49 を提供しています:
:: リポジトリ AUR
    1) gcc49 2) gcc49-alternative-multilib 3) gcc49-multilib 

数字を入力してください (デフォルト=1): 
:: 衝突を確認...
:: 内部衝突を確認...
[Repo Make:3]  doxygen-1.8.20-1  expect-5.45.4-2  dejagnu-1.6.2-2
[Aur:1]  gcc49-4.9.4-3

==> ビルド時の依存パッケージをインストール後に削除しますか? [y/N] 
  1 gcc49                                    (ビルドファイルが存在)
==> パッケージをクリーンビルドしますか?
==> [N]なし [A]全て [Ab]中止 [I]インストール済み [No]未インストール または (1 2 3, 1-3, ^4)
==> A
:: 削除 (1/1): /home/nakada/.cache/yay/gcc49
:: PKGBUILD のダウンロード (1/1): gcc49
  1 gcc49                                    (ビルドファイルが存在)
==> 差異を表示しますか?
==> [N]なし [A]全て [Ab]中止 [I]インストール済み [No]未インストール または (1 2 3, 1-3, ^4)
==> N
:: (1/1) SRCINFO を解析中: gcc49
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (3) dejagnu-1.6.2-2  doxygen-1.8.20-1  expect-5.45.4-2

合計ダウンロード容量:   4.70 MiB
合計インストール容量:  17.47 MiB

:: インストールを行いますか? [Y/n] 

 g++-4.9 コマンドが実行できるか以下のコマンドで確認する。

$ g++-4.9 -v
組み込み spec を使用しています。
COLLECT_GCC=g++-4.9
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/lto-wrapper
ターゲット: x86_64-pc-linux-gnu
configure 設定: /home/nakada/.cache/yay/gcc49/src/gcc-4.9.4/configure --prefix=/usr --build=x86_64-pc-linux-gnu --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --disable-multilib --disable-werror --program-suffix=-4.9 --enable-version-specific-runtime-libs --enable-checking=release
スレッドモデル: posix
gcc バージョン 4.9.4 (GCC) 

 Gikou ディレクトリ内の Makefile の CXX の行を以下のように g++ から g++-4.9 に変更する。

# 
# 1. General Compiler Settings
#
CXX       = g++-4.9

 次に下記の make コマンドを実行すると Gikou/bin ディレクトリ内に技巧の実行ファイル release が生成される。

$ make release
make TARGET=release executable
make[1]: ディレクトリ '/home/nakada/tmp2/Gikou' に入ります
mkdir -p obj/release/src/
g++-4.9 -c -MMD -MP -o obj/release/src/bitboard.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/bitboard.cc
g++-4.9 -c -MMD -MP -o obj/release/src/book.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/book.cc
g++-4.9 -c -MMD -MP -o obj/release/src/cli.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/cli.cc
g++-4.9 -c -MMD -MP -o obj/release/src/cluster.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/cluster.cc
g++-4.9 -c -MMD -MP -o obj/release/src/consultation.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/consultation.cc
g++-4.9 -c -MMD -MP -o obj/release/src/evaluation.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/evaluation.cc
g++-4.9 -c -MMD -MP -o obj/release/src/extended_board.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/extended_board.cc
g++-4.9 -c -MMD -MP -o obj/release/src/gamedb.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/gamedb.cc
g++-4.9 -c -MMD -MP -o obj/release/src/hand.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/hand.cc
g++-4.9 -c -MMD -MP -o obj/release/src/hash_table.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/hash_table.cc
g++-4.9 -c -MMD -MP -o obj/release/src/huffman_code.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/huffman_code.cc
g++-4.9 -c -MMD -MP -o obj/release/src/learning.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/learning.cc
g++-4.9 -c -MMD -MP -o obj/release/src/main.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/main.cc
g++-4.9 -c -MMD -MP -o obj/release/src/mate1ply.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/mate1ply.cc
g++-4.9 -c -MMD -MP -o obj/release/src/mate3.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/mate3.cc
g++-4.9 -c -MMD -MP -o obj/release/src/material.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/material.cc
g++-4.9 -c -MMD -MP -o obj/release/src/move.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/move.cc
g++-4.9 -c -MMD -MP -o obj/release/src/move_feature.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/move_feature.cc
src/move_feature.cc:494:6: 警告: ‘bool {無名}::IsSendOffCheck(Move, const Position&)’ defined but not used [-Wunused-function]
 bool IsSendOffCheck(Move move, const Position& pos) {
      ^
src/move_feature.cc:599:6: 警告: ‘bool {無名}::IsPawnDropInterruptingOwnRook(Move, const Position&)’ defined but not used [-Wunused-function]
 bool IsPawnDropInterruptingOwnRook(Move move, const Position& pos) {
      ^
g++-4.9 -c -MMD -MP -o obj/release/src/move_probability.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/move_probability.cc
g++-4.9 -c -MMD -MP -o obj/release/src/movegen.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/movegen.cc
g++-4.9 -c -MMD -MP -o obj/release/src/movepick.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/movepick.cc
g++-4.9 -c -MMD -MP -o obj/release/src/node.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/node.cc
g++-4.9 -c -MMD -MP -o obj/release/src/notations.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/notations.cc
g++-4.9 -c -MMD -MP -o obj/release/src/position.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/position.cc
g++-4.9 -c -MMD -MP -o obj/release/src/process.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/process.cc
g++-4.9 -c -MMD -MP -o obj/release/src/progress.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/progress.cc
g++-4.9 -c -MMD -MP -o obj/release/src/proofpiece.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/proofpiece.cc
g++-4.9 -c -MMD -MP -o obj/release/src/psq.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/psq.cc
g++-4.9 -c -MMD -MP -o obj/release/src/search.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/search.cc
g++-4.9 -c -MMD -MP -o obj/release/src/square.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/square.cc
g++-4.9 -c -MMD -MP -o obj/release/src/swap.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/swap.cc
g++-4.9 -c -MMD -MP -o obj/release/src/synced_printf.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/synced_printf.cc
g++-4.9 -c -MMD -MP -o obj/release/src/task_thread.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/task_thread.cc
g++-4.9 -c -MMD -MP -o obj/release/src/teacher_data.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/teacher_data.cc
g++-4.9 -c -MMD -MP -o obj/release/src/thinking.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/thinking.cc
g++-4.9 -c -MMD -MP -o obj/release/src/thread.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/thread.cc
g++-4.9 -c -MMD -MP -o obj/release/src/time_control.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/time_control.cc
g++-4.9 -c -MMD -MP -o obj/release/src/time_manager.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/time_manager.cc
g++-4.9 -c -MMD -MP -o obj/release/src/usi.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/usi.cc
g++-4.9 -c -MMD -MP -o obj/release/src/usi_protocol.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/usi_protocol.cc
g++-4.9 -c -MMD -MP -o obj/release/src/zobrist.o -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG  src/zobrist.cc
g++-4.9 -std=c++11 -Wall -Wextra -Wcast-qual -fno-exceptions -fno-rtti -pedantic -Wno-long-long -msse4.2 -D__STDC_CONSTANT_MACROS -fopenmp -O3 -DNDEBUG -o bin/release obj/release/src/bitboard.o obj/release/src/book.o obj/release/src/cli.o obj/release/src/cluster.o obj/release/src/consultation.o obj/release/src/evaluation.o obj/release/src/extended_board.o obj/release/src/gamedb.o obj/release/src/hand.o obj/release/src/hash_table.o obj/release/src/huffman_code.o obj/release/src/learning.o obj/release/src/main.o obj/release/src/mate1ply.o obj/release/src/mate3.o obj/release/src/material.o obj/release/src/move.o obj/release/src/move_feature.o obj/release/src/move_probability.o obj/release/src/movegen.o obj/release/src/movepick.o obj/release/src/node.o obj/release/src/notations.o obj/release/src/position.o obj/release/src/process.o obj/release/src/progress.o obj/release/src/proofpiece.o obj/release/src/psq.o obj/release/src/search.o obj/release/src/square.o obj/release/src/swap.o obj/release/src/synced_printf.o obj/release/src/task_thread.o obj/release/src/teacher_data.o obj/release/src/thinking.o obj/release/src/thread.o obj/release/src/time_control.o obj/release/src/time_manager.o obj/release/src/usi.o obj/release/src/usi_protocol.o obj/release/src/zobrist.o -lpthread
make[1]: ディレクトリ '/home/nakada/tmp2/Gikou' から出ます
$ cd bin
$ ls -l
合計 872
drwxr-xr-x 2 nakada nakada   4096 11月  4 00:17 ./
drwxr-xr-x 6 nakada nakada   4096 11月  4 00:10 ../
-rwxr-xr-x 1 nakada nakada 883904 11月  4 00:16 release*

 次に、技巧2(Windows版 v2.0.2)(最新)より gikou2_win.zip をダウンロードしてファイルを展開する。gikou2_win.zip の展開には、unzip コマンドを利用するが manjaro で通常インストールされている unzip を使用すると展開時に日本語ファイル名が下記のように文字化けを起こしてしまう。

$ unzip gikou2_win.zip 
Archive:  gikou2_win.zip
  inflating: book.bin                
  inflating: Copying.txt             
  inflating: gikou.exe               
  inflating: gikou_ja.txt            
  inflating: params.bin              
  inflating: probability.bin         
  inflating: progress.bin            
  inflating: Readme.md.txt           
  inflating: ���^�-���i�t�@�C��/00_�S���^.bin  
  inflating: ���^�-���i�t�@�C��/01_���q.bin  
  inflating: ���^�-���i�t�@�C��/02_���|����.bin  
  inflating: ���^�-���i�t�@�C��/03_����ĵ��.bin  
  inflating: ���^�-���i�t�@�C��/04_�p������.bin  
  inflating: ���^�-���i�t�@�C��/05_�l���=��.bin  
  inflating: ���^�-���i�t�@�C��/06_���=��.bin  
  inflating: ���^�-���i�t�@�C��/07_�O���=��.bin  
  inflating: ���^�-���i�t�@�C��/08_���=��.bin  
  inflating: ���^�-���i�t�@�C��/09_�+���+�����^.bin  

 そこで unzip-iconv を下記の yay コマンドでインストールし、その unzip コマンドでファイルを展開する。

$ yay -S unzip-iconv
$ mkdir gikou
$ cd gikou
$ unzip -OCP932 ../gikou2_win.zip 
Archive:  ../gikou2_win.zip
  inflating: book.bin                
  inflating: Copying.txt             
  inflating: gikou.exe               
  inflating: gikou_ja.txt            
  inflating: params.bin              
  inflating: probability.bin         
  inflating: progress.bin            
  inflating: Readme.md.txt           
  inflating: 戦型別定跡ファイル/00_全戦型.bin  
  inflating: 戦型別定跡ファイル/01_矢倉.bin  
  inflating: 戦型別定跡ファイル/02_相掛かり.bin  
  inflating: 戦型別定跡ファイル/03_横歩取り.bin  
  inflating: 戦型別定跡ファイル/04_角換わり.bin  
  inflating: 戦型別定跡ファイル/05_四間飛車.bin  
  inflating: 戦型別定跡ファイル/06_中飛車.bin  
  inflating: 戦型別定跡ファイル/07_三間飛車.bin  
  inflating: 戦型別定跡ファイル/08_向飛車.bin  
  inflating: 戦型別定跡ファイル/09_その他の戦型.bin

 ホームディレクトリに存在する .bashrc に下記の1行を追加しておけば、unzip の展開時に毎回オプション指定する必要はなくなる。

export UNZIPOPT="-OCP932"

 最後に manjaro でビルドした実行ファイル Gikou/bin/release ファイルを gikou ディレクトリに保存する。