nounai.output(spaghetiThinking);

趣味と実益を兼ねて将棋プログラム(研究ツールなど)を作ってみたいと思う私の試行錯誤とか勉強したことを綴ってゆく予定です。 主目的はプログラミングの経験値稼ぎですが、コンピュータ将棋の製作も目指してみたいとも考えています。

Bonanza 6.0 のビルドエラー

client以下のソースをmakeしたらエラーだった。


以下、手元の環境とmakeのログ。

  • Ubuntu 12.04 LTS 64bit
  • Intel® Core™ i7-2670QM CPU @ 2.20GHz × 8
  • gcc 4.6.3
make CC=gcc CFLAGS='-std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN' LDFLAG1='-lm -lpthread' bonanzamake[1]: ディレクトリ `/*****/bonanza_v6.0/src/client' に入りますgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN data.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN main.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN io.cio.c: 関数 ‘out_hand0’ 内:io.c:626:7: 警告: 書式が文字列リテラルでは無く、かつ書式引数ではありません [-Wformat-security]io.c:627:7: 警告: 書式が文字列リテラルでは無く、かつ書式引数ではありません [-Wformat-security]gcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN proce.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN utility.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN ini.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN attack.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN book.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN makemove.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN unmake.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN time.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN csa.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN valid.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN bitop.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN iterate.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN searchr.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN search.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN quiesrch.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN evaluate.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN swap.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN hash.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN root.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN next.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN movgenex.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN genevasn.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN gencap.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN gennocap.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN gendrop.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN mate1ply.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN rand.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN learn1.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN learn2.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN evaldiff.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN problem.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN ponder.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN thread.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN sckt.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN debug.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN mate3.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN genchk.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN phash.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN dfpn.cgcc -c -std=gnu99 -O2 -Wall -DNDEBUG -DMINIMUM -DHAVE_SSE4 -msse4.1 -DDFPN -DTLP -DDFPN_CLIENT -DINANIWA_SHIFT -DMNJ_LAN -DCSA_LAN dfpnhash.cgcc -lm -lpthread -o bonanza data.o main.o io.o proce.o utility.o ini.o attack.o book.o makemove.o unmake.o time.o csa.o valid.o bitop.o iterate.o searchr.o search.o quiesrch.o evaluate.o swap.o  hash.o root.o next.o movgenex.o genevasn.o gencap.o gennocap.o gendrop.o mate1ply.o rand.o learn1.o learn2.o evaldiff.o problem.o ponder.o thread.o sckt.o debug.o mate3.o genchk.o phash.o dfpn.o dfpnhash.o utility.o: In function `mnj_reset_tbl':utility.c:(.text+0x1c53): undefined reference to `sqrt'thread.o: In function `dfpn_client_start':thread.c:(.text+0xb36): undefined reference to `pthread_create'thread.o: In function `tlp_start':thread.c:(.text+0xbd6): undefined reference to `pthread_create'collect2: ld はステータス 1 で終了しましたmake[1]: *** [bonanza] エラー 1make[1]: ディレクトリ `/*****/bonanza_v6.0/src/client' から出ますmake: *** [gcc] エラー 2

問題はsqrtとpthread_createがundefined referenceになってること。エラーをコピペして調べてみると、sqrtについてはこちら、pthread_createについてはこちらのページに記述あり。要はそれぞれ必要なライブラリがリンクされてなくて、参照(呼び出し)先ないんでエラーですよ、と言っているっぽい。

さて、解決方法を試すべくちょろっとMakefileをいじったりしてみたけど改善なし。そもそもmake関係の書き方なんかはじめの一歩ぐらいのことしか知らないし、gccのオプションは\(^o^)/な状態です。トレースしてデータ構造の中身とかをのぞいてみようと思ってたのですが・・・まだ早かったみたいです。まぁ、もう少しmakeのお勉強をしてからまたトライすることにします。

p.s.

※正直、csaの読み込み部分を見たいだけなので、トレースまでしなくても大丈夫なんですけどね。最近デバッグの本を買ってgdbの練習中なので、ついトレースしてみたくなってしまう衝動に駆られ、負けてしまい、こういうことになってしまいました。

p.s. 2 - 参照