[Gauche-devel-jp] CVS 版が make できません。

Back to archive index

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



Gauche-devel-jp メーリングリストの案内
Back to archive index