結果としては、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 件のコメント:
コメントを投稿