2013年5月5日日曜日

[どうぶつしょうぎ] 完全解析ツール on Ubuntu

前回まで、田中先生の どうぶつしょうぎ完全解析ツールは Amazon EC2 上の Amazon Linux 上で動かしていたのだが、 手元の VirtualBox 上 の Ubuntu に持ってくることにした。

結果としては、32bit 版 Ubuntu では動かず、64bit 版が必要なようだ。
→ 訂正: Ubuntu 13.04 x64 with g++ 4.7.3 でも動かない。
  現状の動作実績は、Ubuntu 11.10 x64 with g++ 4.6.3のみ。

追記
完全解析ツールのバグだった。
環境によって動いたり動かなかったりはたまたまだった模様。
原因と修正方法はこちら。

コアダンプ on Ubuntu - 13.04 x32


せっかくなので、最新の Ubuntu - 13.04 を使ってみる。
~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.04
DISTRIB_CODENAME=raring
DISTRIB_DESCRIPTION="Ubuntu 13.04"


gcc はもともとインストールされているが、g++ が必要なのでインストール。
sudo apt-get install g++

make して、データファイルを作って実行する。
~/doubtsu-shogi/dobutsu$ ./checkState data/init.txt
------------------
-KI-LI-ZO
 . -HI .
 . +HI .
+ZO+LI+KI
000000
+

Segmentation fault (コアダンプ)


コアダンプした。
そういえば、make したときにこんな警告が大量に出てた。
dobutsu.h:108:23: 警告: 符号付きと符号無しの整数式の間での比較です [-Wsign-compare]

Amazon Linux の時には動いていたのであまり気にしなかったのだが、ちょっと嫌な予感がしたので、 たまたま手元にあった、64bit 版の Ubuntu で試してみることにする。


再挑戦 on Ubuntu-11 x64


手元て動いているのは少し古いディストリビューションなのだがとりあえずこれで試してみる。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"

g++ を インストールしようとすると依存関係のエラーになったので、 要求された update-inetd パッケージだけ個別にインストールしてから g++ をインストールすることで解決。

次に解析ツールを展開しようとするとディスクがフルに。
データファイルは展開すると3GB超になるので、 もともと仮想ディスクが小さかった為にいっぱいになってしまったようだ。

仮想ディスクのサイズ変更は面倒そうなので、とりあえず VirtualBox で仮想ディスクを追加することにした。 追加した仮想ディスクは Ubuntu には /dev/sdb で見えるデバイスになる。
これを、Ubuntu のディスクマネージャで ext4 でフォーマットしてマウント。

やっと展開完了。
make して実行すると期待通りに実行できた。


結論


どうやらこの解析ツールは 64bit システム上で動作することが前提になっている模様。
整数型(int) が 64bit長 であることを前提に記述されているのだろうか・・・・

Ubuntu 11.10 x64 の g++ のバージョンは 4.6.3、
Ubuntu 13.04 x32 の g++ のバージョンは 4.7.3、
Ubuntu のバージョンや g++ のバージョンという違いはあるのだがそこまで検証する気もないので、 Ubuntu 11.10 x64 上で使うことにする。


追記

Ubuntu 13.04 x64 環境を作ったので 完全解析ツールが動くか試してみた。

Ubuntu 13.04 x64 with g++ 4.7.3 → 動かない。
「Segmentation fault (コアダンプ)」になった。

Ubuntu の違いか g++ の違いかは分からないが、64bit/32bit の違いだけが原因というわけではなさそう。

0 件のコメント:

コメントを投稿