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

Back to archive index

KIMURA Shigenobu skimu****@mac*****
2004年 7月 12日 (月) 15:31:14 JST


On Jul 11, 2004, at 11:07 AM, KIMURA Shigenobu wrote:
> 違います。今忙しいから後で説明します。

ですが、shiro さんのいっていた正しい作法とは gauche.h の中で

# if defined(LIBGAUCHE_BODY)
#  define SCM_EXTERN extern __declspec(dllexport)
# else
#  define SCM_EXTERN extern __declspec(dllimport)
# endif

とすること、つまり libgauche の中でインクルードされるときは
「こいつらはlibgauche外から参照していいっすよ」
また、uvector などの外部のライブラリからインクルードさるときは
「こいつらはこのライブラリの外に実体があるよ」
と一々指定しなくてはならなかったのだけど、前者に関しては

> ところがcygwinではいつからか、__declspec(dllexport)をつけてなくても
> グローバルシンボルは自動的に全部exportしてくれる機能がつきました。
> -Wl,--export-all-symbolsがそれかな。そこで、これ幸いとdllexport
> の方を無視することにした、

ので、現状の gauche.h の用になっているということです。

で gauche.h のこの変更ですが
+
+SCM_EXTERN ScmObj (*Scm_ReadUvectorHook)(ScmPort *port, const char 
*tag,
+                              ScmReadContext *ctx);
+

この関数は uvinit.c  の中だけからしか参照されないので、
gauche.h の中ではなく uvector.c にだけあればいのだけど、
ちゃんと 75 行めにありますねぇ。なにがいけないんだろ。

結構謎なのが uvinit.c の

-void Scm_Init_libgauche_uvector(void)
+SCM_EXTERN void Scm_Init_libgauche_uvector(void)

この変更で動いちゃうところ。
SCM_EXTERN じゃなくて extern だったらどうなります?
あと、libgauche-uvector  は -Wl,-export-all-symbols 付きでリンクされてますか?









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