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

Back to archive index

Shiro Kawai shiro****@lava*****
2004年 7月 11日 (日) 15:14:19 JST


だんだん思い出してきました。

From: KIMURA Shigenobu <skimu****@mac*****>
Subject: [Gauche-devel-jp] Re: gosh の開発で行き詰まった
Date: Sun, 11 Jul 2004 00:53:28 -0500

> >> どうやら上の定義時に
> >>  #define SCM_CLASS_DECL(klass) extern ScmClass klass
> >>  を以下のように書き換えると問題はなくなるようですが、何かまずい点はありま
> >> す
> >> か?
> >>  #define SCM_CLASS_DECL(klass) SCM_EXTERN ScmClass klass
> >
> > 例のこれがここで問題を生じさせるようです。
> 
> SCM_EXTERN の定義を見てみると
[snip]
> libgauche のなかに実体があって gauche.h の中で SCM_CLASS_DECL() されている
> Scm_StringClass は救われて、uvector.c のなかに実体が定義されている
> Scm_F64VectorClass は gauche/uvector.h の中でやはり SCM_CLASS_DECL()
> されてしまうのでコンパイラは DLL から読み込まれると思いこみ参照不能エラーが
> 出ててるんたど思います。たぶん。

本来、自分のDLL内で定義して外に見せる宣言には__declspec(dllexport)を、
外部DLLで定義されてて自分で参照する宣言には__declspec(dllimport)を
つけるのが正しい作法らしいんですが、cygwin portをやってる時に、
上記のようにextensionのコンパイル時に問題が出た覚えがあります。

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

一部のアーキテクチャのせいでコードが読みにくくなるのは避けたいので、
なんかcleverなトリックはないかしらん。

--shiro



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