[Gauche-devel-jp] Re: gosh の開発で行き詰まった

Back to archive index

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/



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