Shiro Kawai
shiro****@lava*****
2003年 3月 8日 (土) 04:37:45 JST
From: Makoto SATOH <makot****@yahoo*****> Subject: Re: [Gauche-devel-jp] CVS 版が make できません。 Date: Sat, 8 Mar 2003 02:22:31 +0900 (JST) > 佐藤です。 > > make realcleanしてから、./AUTOCONF; ./configure; make > (実際は別々に)しましたが、同じところで同じエラーが出ました。 > > カーネルバージョンも合わせたほうがいいですかねえ? > # 良く分かってません。 せっかくエラーメッセージという有力な手がかりもあるんで、 環境のせいにする前に原因を切り分けてみましょうよ。 エラーメッセージから見て取れるのは、 (1) スレッド絡みの関数が未定義だと言っている (2) それらの関数を参照しているのはgc/linux_thread.cだ ということですね。 で、スレッド絡みの関数はlibpthreadにあって、goshのリンク時に -lpthreadが指定されていないからエラーが出ている、という 推測ができます。 実際、src/Makefileを見てみれば-lpthreadがついてないはず。 configure時に--enable-threads=pthreadsをつけた場合にのみ pthreadはリンクされるようになってます。 gc/Makefileの方はどうなっているでしょう。THREADで検索 かけてみてください。 スレッド無しでconfigureかけた場合は THREADLIBS が空の 定義になっていて、他にTHREADのつくシンボルは使ってないはずです。 スレッド有りでconfigureかけた場合は THREADLIBS=-lpthreads になっていて、DEFSに-DGC_LINUX_THREADS=1が追加されている はずです。 で、gc/linux_threads.cのソースを見ると、全体が # if defined(GC_PTHREADS) && !defined(GC_SOLARIS_THREADS) \ && !defined(GC_IRIX_THREADS) && !defined(GC_WIN32_THREADS) ... # endif /* GC_LINUX_THREADS and friends */ で囲まれています。GC_PTHREADSはどこから来たのかとgrepしてみれば、 gc/include/gc.hに # if defined(GC_SOLARIS_PTHREADS) || defined(GC_FREEBSD_THREADS) || \ defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) || \ defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \ defined(GC_DGUX386_THREADS) || \ (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) # define GC_PTHREADS とあるので、THREADS絡みの定義が無ければlinux_threads.cは空に なるはずです。 エラーメッセージからするとlinux_threads.cは空になっていないよう ですんで、上に挙げたステップのどれかがおかしくなっていると 推測されます。 とりあえず、gc/Makefileが予想通りに作られているかあたりから 調べてみて頂けますか。 --shiro