From: "H.Yamamoto" Date: 2004-08-21T18:12:29+09:00 Subject: [ruby-dev:24152] Re: ruby/tk crashes on bcc32 山本です。 >もしかしたら不可能なのかもしれませんが、とりあえずbcc32のRTLダイナミックリンク化に >取り組んでみます。 うまくいった気がします。make test, testrb e:/ruby-cvs/ruby_1_8/test ともに動きました。(-tWC はコンソールアプリ作成指令なのですが、これがないと SEGV します。 その代わり rubyw は動かないんじゃないかと思ったのですが、動いているようです) Index: bcc32/Makefile.sub =================================================================== RCS file: /var/cvs/src/ruby/bcc32/Makefile.sub,v retrieving revision 1.42.2.9 diff -u -w -b -p -r1.42.2.9 Makefile.sub --- bcc32/Makefile.sub 7 Jul 2004 06:54:39 -0000 1.42.2.9 +++ bcc32/Makefile.sub 21 Aug 2004 06:44:09 -0000 @@ -95,7 +95,7 @@ libdir = $(exec_prefix)/lib DESTDIR = $(prefix) !endif !ifndef CFLAGS -CFLAGS = -q $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi +CFLAGS = -q -tWR -tWC $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi !endif !ifndef CPPFLAGS CPPFLAGS = -I. -I$(srcdir) -I$(srcdir)missing @@ -109,7 +109,7 @@ RFLAGS = $(iconinc) !ifndef EXTLIBS EXTLIBS = !endif -LIBS = cw32.lib import32.lib ws2_32.lib $(EXTLIBS) +LIBS = cw32i.lib import32.lib ws2_32.lib $(EXTLIBS) MISSING = acosh.obj crypt.obj erf.obj win32.obj !ifndef STACK ただ、これだけだとなぜか .\dmyext.c: tlib /a "bccwin32-ruby18-static.lib" array.obj bignum.obj class.obj compar.obj dir.obj dln.obj enum.obj error.obj eval.obj file.obj gc.obj hash.obj inits.obj io.obj marshal.obj math.obj numeric.obj object.obj pack.obj parse.obj prec.obj process.obj random.obj range. obj re.obj regex.obj ruby.obj signal.obj sprintf.obj st.obj string .obj struct.obj time.obj util.obj variable.obj version.obj acosh.obj crypt.obj erf.obj win32.obj dmyext.obj TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation bcc32 -q -tWR -tWC -O -6 -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi -DRUBY_EXPORT -I. -I. -I./ -I./missing -c .\main.c .\main.c: cw32i.lib import32.lib ws2_32.lib ilink32 -q -Gn -S:0x2000000 -Tpe c0x32.obj main.obj dmyext.obj,miniruby. exe,nul,bccwin32-ruby18-static.lib cw32i.lib import32.lib ws2_32.lib Error: 外部シンボル '__umask' が未解決(E:\RUBY-CVS\RUBY_1_8\BCCWIN32-RUBY18-STA TIC.LIB|file が参照) Error: 外部シンボル '__getpid' が未解決(E:\RUBY-CVS\RUBY_1_8\BCCWIN32-RUBY18-ST ATIC.LIB|win32 が参照) ** error 2 ** deleting miniruby.exe というエラーが出たので、少し手直しが必要でした。何故スタティックリンク のとき出なかったエラーが出たのかよくわかりません。(関数の先頭に付いてた ハイフンがなくなった?確かめてません)しばらくこれで使ってみようと思います。 Index: win32/win32.c =================================================================== RCS file: /var/cvs/src/ruby/win32/win32.c,v retrieving revision 1.103.2.2 diff -u -w -b -p -r1.103.2.2 win32.c --- win32/win32.c 25 Jul 2004 02:08:12 -0000 1.103.2.2 +++ win32/win32.c 21 Aug 2004 06:47:02 -0000 @@ -3150,7 +3150,13 @@ pid_t rb_w32_getpid(void) { pid_t pid; +#ifndef __BORLANDC__ pid = _getpid(); +#else +#undef getpid + pid = getpid(); +#endif + if (IsWin95()) pid = -pid; return pid; Index: win32/win32.h =================================================================== RCS file: /var/cvs/src/ruby/win32/win32.h,v retrieving revision 1.46.2.1 diff -u -w -b -p -r1.46.2.1 win32.h --- win32/win32.h 25 Jul 2004 02:08:12 -0000 1.46.2.1 +++ win32/win32.h 21 Aug 2004 06:44:19 -0000 @@ -108,7 +108,6 @@ extern "C++" { #define perror(s) _perror(s) #define read(h, b, l) _read(h, b, l) #define tell(h) _tell(h) -#define umask(m) _umask(m) #define unlink(p) _unlink(p) #define write(h, b, l) _write(h, b, l) #define _open _sopen ***** CVS exited normally with code 1 *****