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

アーカイブの一覧に戻る

shelarcy shela****@capel*****
2004年 7月 12日 (月) 19:40:59 JST


On Mon, 12 Jul 2004 18:47:22 +0900, shelarcy 
<shela****@capel*****> wrote:
>> 結構謎なのが uvinit.c の
>>
>> -void Scm_Init_libgauche_uvector(void)
>> +SCM_EXTERN void Scm_Init_libgauche_uvector(void)
>>
>> この変更で動いちゃうところ。
>> SCM_EXTERN じゃなくて extern だったらどうなります?
>
> export されません。
> 原因はこの辺りにあって、そこでの仕組みが泥縄的に展開されてます。
>
> http://lists.sourceforge.jp/mailman/archives/gauche-devel-jp/2004-June/000883.html
>
>> あと、libgauche-uvector  は -Wl,-export-all-symbols 付きでリンクされてま
>> すか?
>
> というところで気がついたのですが、それ付きでリンクされているとしても無視
> する仕組みが働いてしまっているのではないかな、ということ。

もしやと思ってこうすると問題は解決しました。

--- gauche.h.2~	Mon Jul 12 07:44:42 2004
+++ gauche.h	Mon Jul 12 18:59:25 2004
@@ -76,7 +76,7 @@
  /* Ugly cliche for Win32. */
  #if defined(__CYGWIN__) || WIN32_NATIVE
  # if defined(LIBGAUCHE_BODY)
-#  define SCM_EXTERN extern __declspec(dllexport)
+#  define SCM_EXTERN extern
  # else
  #  define SCM_EXTERN extern __declspec(dllimport)
  # endif
@@ -279,7 +279,7 @@
  #define SCM_CPP_CAT(a, b)   a ## b
  #define SCM_CPP_CAT3(a, b, c)  a ## b ## c

-#define SCM_CLASS_DECL(klass) SCM_EXTERN ScmClass klass
+#define SCM_CLASS_DECL(klass) extern ScmClass klass
  #define SCM_CLASS_STATIC_PTR(klass)  (&klass)

  /* A common header for all Scheme objects */

というわけできちんと全てのシンボルが export されるようになったので、
元に戻します。

--- uvinit.c.2~	Mon Jul 12 18:58:03 2004
+++ uvinit.c	Mon Jul 12 19:03:04 2004
@@ -75,7 +75,7 @@
  SCM_EXTERN ScmObj (*Scm_ReadUvectorHook)(ScmPort *port, const char *tag,
                                           ScmReadContext *ctx);

-SCM_EXTERN void Scm_Init_libgauche_uvector(void)
+void Scm_Init_libgauche_uvector(void)
  {
      ScmModule *m;
      ScmObj t;

……なんだろこの仕様。


そこからの連想で以下のように定義してやれば gc.dll がインポートできるだろう
と思ったのですが、成功しませんでした。

#if defined(__MINGW32__) && defined(GC_DLL)
# ifdef GC_BUILD
#   define GC_API extern
# else
#   define GC_API extern __declspec(dllimport)
# endif
#endif


gauche\bin\gcc\release\bignum.o(.text+0x80):bignum.c: undefined reference 
to `_imp__GC_malloc_atomic'


-- 
shelarcy <shela****@capel*****>
http://page.freett.com/shelarcy/



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る