From: WATANABE Hirofumi Date: 2004-08-16T13:12:55+09:00 Subject: [ruby-dev:24085] Re: to compile tcltklib (bcc32) わたなべです。 "H.Yamamoto" writes: > 変数を参照しないと、最適化で消えてしまうみたいです。下のコードでは > エラーになりました。(でも tcltklib.c でも参照していないのに???) > > #include > #include > > extern int matherr(); > int *tclDummyMathPtr = (int *) matherr; > > int main() > { > printf("%d\n", tclDummyMathPtr); > return 0; > } > > R:\>bcc32 f.c > Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland > f.c: > Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland > Error: 外部シンボル '_matherr' が未解決(R:\F.OBJ が参照) _がついてるけど、bcc32ではCのシンボルにはすべて_がprefixされ ます。実際に未解決なのはmatherrのほうです。 > R:\>bcc32 -Dmatherr=_matherr f.c > Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland > f.c: > Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland これだけで最適化で消えたとは言えません。 実際に実行してみるとprintfは消えてませんし。 matherr=_matherrでシンボルの名前が解決しただけです。 bcc32のライブラリにはCの_matherrは存在します。 > >でも #if !defined __MINGW32__ でmingw版で問題があるという話を > >聞かないということは、あってもなくてもいいってことなんですか > >ねえ。 > > コメントを見る限りでは Sun の問題のようなので、#if defined(sun) でいいのかも > しれません。 これは強制的にTclのmatherrをリンクさせるためのものです。 http://cvs.sourceforge.net/viewcvs.py/tclx/tclx/Attic/README.SHLIBS?rev=4.2 によれば古いsun(たぶんsun4)で問題があっただけなので、このコー ド自体もはや意味がないようです。 -- わたなべひろふみ