[Gauche-devel-jp] Re: undefined symbol ...

Back to archive index

Makoto Satoh makot****@yahoo*****
2005年 4月 20日 (水) 22:15:10 JST


--- Shiro Kawai <shiro****@lava*****> からのメッセージ:
> > $ ldd gd.so
> >  libgauche.so.0 => /usr/local/lib/libgauche.so.0 (0x40023000)
> >  libdl.so.2 => /lib/tls/libdl.so.2 (0x400ec000)
> >  libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0x400ef000)
> >  libutil.so.1 => /lib/tls/libutil.so.1 (0x4011c000)
> >  libm.so.6 => /lib/tls/libm.so.6 (0x4011f000)
> >  libpthread.so.0 => /lib/tls/libpthread.so.0 (0x40141000)
> >  libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40150000)
> >  libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4016f000)
> >  libpng12.so.0 => /usr/lib/libpng12.so.0 (0x401dc000)
> >  libz.so.1 => /usr/lib/libz.so.1 (0x40201000)
> >  libc.so.6 => /lib/tls/libc.so.6 (0x40213000)
> >  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
> 
> で、実際、ここでlibgd.soが出てないですから、libgdがリンクされてないってことです。
> gdImageDestroyだけじゃなく、gd*系は全て未定義になってて、たまたま
> 最初に表れたgdImageDestroyがエラーメッセージに出てきただけでしょう。
> 
> gdlib-confg --libsの出力はどうなりますか。

がーん、私は何を見ているのでしょうか。。。

$ gdlib-config --all
GD library  2.0.33
includedir: /usr/include
cflags:     -I/usr/include
ldflags:
libs:       -lpthread -ljpeg -lfreetype -lpng12 -lz -lm
libdir:     /usr/lib
features:   GD_JPEG GD_FREETYPE GD_PNG GD_GIF

手でMakefile.inのLIBSに-lgdを追加しました。

$ ldd gd.so
                libgauche.so.0 => /usr/local/lib/libgauche.so.0 (0x40021000)
        libdl.so.2 => /lib/tls/libdl.so.2 (0x400ea000)
        libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0x400ed000)
        libutil.so.1 => /lib/tls/libutil.so.1 (0x4011a000)
        libm.so.6 => /lib/tls/libm.so.6 (0x4011d000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4013f000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x4014e000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4016d000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0x401da000)
        libz.so.1 => /usr/lib/libz.so.1 (0x401ff000)
        libgd.so.2 => /usr/lib/libgd.so.2 (0x40211000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40260000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

しかし今度はエラーメッセージが変わりました。

$ make check
/usr/local/bin/gosh -I. test.scm > test.log
Testing gd ...                               *** ERROR: failed to link "gd" dynamically: .
/gd.so: undefined symbol: Scm_GdFontPtrClass
Stack Trace:
_______________________________________
make: *** [check] エラー 70

$ nm --dynamic gd.so | grep gdImageDestroy
         U gdImageDestroy

$ nm --dynamic gd.so | grep Scm_GdFontPtrClass
         U Scm_GdFontPtrClass

Scm_GdFontPtrClassは、

 SCM_CLASS_DECL(Scm_GdFontPtrClass);
 #define SCM_CLASS_GDFONTPTR (&Scm_GdFontPtrClass)
 #define SCM_GDFONTPTR(obj) ((ScmGdFontPtr*)(obj))
 #define SCM_GDFONTPTRP(obj) (SCM_XTYPEP(obj, SCM_CLASS_GDFONTPTR))

 typedef struct ScmGdFontPtrRec {
   SCM_HEADER;
   gdFontPtr gdFontPtr;
 } ScmGdFontPtr;

として使っているものです。

出来上がったgd.soに実行属性がついているのが気になりますが。



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