shelarcy
shela****@capel*****
2004年 6月 27日 (日) 21:14:20 JST
On Sun, 27 Jun 2004 00:23:52 -1000 (HST), Shiro Kawai <shiro****@lava*****> wrote: >> 参考までに gauche.def を添付しておきます。 > > ああ、確かに、関数しかexportされてませんね。 > それにしてもfoo_dataでうまくいくのはなんでだろう。 関数を定義してやる。 int foo_func () { return 1; } 問題なし LIBRARY foo.dll EXPORTS foo_data DATA foo_func export のための条件を作る (WIN32_NATIVE は宣言済み) #if defined(__CYGWIN__) || WIN32_NATIVE # define SCM_EXTERN extern __declspec(dllexport) # else # define SCM_EXTERN extern __declspec(dllimport) #endif int foo_data = 1; SCM_EXTERN int foo_func () { return 1; } foo_data の定義がない LIBRARY foo.dll EXPORTS foo_func __declspec(dllimport) のための条件は作らない場合 #if defined(__CYGWIN__) # define SCM_EXTERN extern __declspec(dllexport) # else # define SCM_EXTERN extern #endif 問題なし LIBRARY foo.dll EXPORTS foo_data DATA foo_func どうやら cygwin を真似てこう定義したのが悪いようですが、 /* Ugly cliche for Win32. */ #if defined(__CYGWIN__) || WIN32_NATIVE # if defined(LIBGAUCHE_BODY) # define SCM_EXTERN extern __declspec(dllexport) # else # define SCM_EXTERN extern __declspec(dllimport) # endif #else /*!__CYGWIN__ && !WIN32_NATIVE*/ # define SCM_EXTERN extern #endif /*!__CYGWIN__ && !WIN32_NATIVE*/ 定義しないならしないで、こうなりますし…… gcc.compile.c bin\gcc\debug\main.o gcc.link bin\gcc\debug\gosh.exe Info: resolving _Scm_PairClass by linking to __imp__Scm_PairClass (auto-import) d000033.o(.idata$5+0x0): multiple definition of `_imp__Scm_PairClass' d000019.o(.idata$5+0x0): first defined here d000033.o(.idata$6+0x0): multiple definition of `_nm__Scm_PairClass' d000019.o(.idata$6+0x0): first defined here -- shelarcy <shela****@capel*****> http://page.freett.com/shelarcy/