shelarcy
shela****@capel*****
2004年 7月 12日 (月) 00:57:01 JST
On Sun, 11 Jul 2004 09:39:05 -0500, KIMURA Shigenobu <skimu****@mac*****> wrote: > 宣言は uvinit.c の 75 行めにありますが、これは > > 75 SCM_EXTERN ScmObj (*Scm_ReadUvectorHook)(ScmPort *port, const > char *tag, > 76 ScmReadContext *ctx); > > の様に SCM_EXTERN になってます。てーことは libgauche の中に実体があるん > だなぁ、って察しがつくので調べてみるとやはり src/read.c の中で実体が定義 > されてます。 > しかし、いま SCM_EXTERN は extern __declspec(dllimport) の筈ですから、う > まくシンボルを見つけられないのは困まりものです。 > > ちなみにこの関数は Scheme プログラムの中で (use gauche.uvector) した後で > #u32(1 2 3) とかやったときに u32vector として読み込む仕組みを提供していま > す。 ヘッダ関係探したのになかったので「?」と思っていましたが、そういうことでし た か。shiro さんの言っていたこれのせいですね。 > ところがcygwinではいつからか、__declspec(dllexport)をつけてなくても > グローバルシンボルは自動的に全部exportしてくれる機能がつきました。 > -Wl,--export-all-symbolsがそれかな。そこで、これ幸いとdllexport > の方を無視することにした、のだったと思います。 しかし、それでは私が困るので書かせてもらいます。 --- gauche.h.1~ Sun Jul 11 11:01:37 2004 +++ gauche.h Mon Jul 12 00:41:07 2004 @@ -1430,7 +1430,10 @@ SCM_EXTERN ScmObj Scm_DefineReaderCtor(ScmObj symbol, ScmObj proc, ScmObj finisher); - + +SCM_EXTERN ScmObj (*Scm_ReadUvectorHook)(ScmPort *port, const char *tag, + ScmReadContext *ctx); + /*-------------------------------------------------------- * HASHTABLE */ > dl_win.c の方ですが、 > > ...... > > DWORD というのはきっと windows.h で typedef されてるものと仮定すると > 52 行めは auto 変数の初期化をしてる様に見えます。で初期値を作るのに > GetLastError () に変数 void を渡して... えっ? void?!?!.... って予約語 > じゃないのよ。 > バグじゃないかな。 > > diff -u -d -b -w -r1.3 dl_win.c > --- dl_win.c 5 Jul 2003 03:29:12 -0000 1.3 > +++ dl_win.c 11 Jul 2004 14:38:27 -0000 > @@ -49,9 +49,9 @@ > static const char *dl_error(void) > { > char buf[80], *p; > - DWORD code = GetLastError(void); > + DWORD code = GetLastError(); > sprintf(buf, "error code %d", code); > - p = SCM_NEW_ATOMIC2(strlen(buf)+1, char *); > + p = SCM_NEW_ATOMIC2(char *, strlen(buf)+1); > strcpy(p, buf); > return p; > } とりあえずエラーは出なくなったのでこれでいきました。 -- shelarcy <shela****@capel*****> http://page.freett.com/shelarcy/