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

Back to archive index

shelarcy shela****@capel*****
2004年 7月 11日 (日) 20:24:30 JST


On Sat, 10 Jul 2004 20:14:19 -1000 (HST), Shiro Kawai <shiro****@lava*****> 
wrote:
>> 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なトリックはないかしらん。

そうですね、LIBGAUCHE_BODY ですね。今日歩きながら考えてました。

すると、Boost 上で無理やり定義してやって

project gauche/ext/uvector
     : requirements <define>LIBGAUCHE_BODY
     : source-location ../../../ext/uvector
     ;

SOURCES = uvector_head uvector uvutil uvinit uvlib uvector_tail ;

lib uvector : $(SOURCES).c /gauche//gc /gauche//gauche
     : <include>../../../src <include>../../../gc/include 
<include>../../../ext/uvector
     ;

えいっ。


gcc.link.dll ext\uvector\bin\gcc\release\uvector.dll
Info: resolving _Scm_SequenceClass by linking to __imp__Scm_SequenceClass 
(auto-import)
Info: resolving _Scm_CollectionClass by linking to 
__imp__Scm_CollectionClass (auto-import)
Info: resolving _Scm_TopClass by linking to __imp__Scm_TopClass 
(auto-import)
Info: resolving _Scm_ClassClass by linking to __imp__Scm_ClassClass 
(auto-import)
Info: resolving _Scm_IntegerClass by linking to __imp__Scm_IntegerClass 
(auto-import)
Info: resolving _Scm_RealClass by linking to __imp__Scm_RealClass 
(auto-import)
Info: resolving _Scm_PairClass by linking to __imp__Scm_PairClass 
(auto-import)
Info: resolving _Scm_VectorClass by linking to __imp__Scm_VectorClass 
(auto-import)
Info: resolving _Scm_StringClass by linking to __imp__Scm_StringClass 
(auto-import)
Info: resolving _Scm_ProcedureClass by linking to 
__imp__Scm_ProcedureClass (auto-import)
Info: resolving _Scm_PortClass by linking to __imp__Scm_PortClass 
(auto-import)
ext\uvector\bin\gcc\release\uvinit.o(.text+0x283):uvinit.c: undefined 
reference to `Scm_ReadUvectorHook'

resolving は大丈夫ですよね。
すると残ったエラーは Scm_ReadUvectorHook だけですか。
cygwin では問題ないのにどこで問題が出てるんだろう?

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



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