[Gauche-devel-jp] Re: Gauche の Windows での DLL 化

Zurück zum Archiv-Index

Shiro Kawai shiro****@lava*****
2004年 6月 17日 (木) 23:01:40 JST


From: shelarcy <shela****@capel*****>
Subject: [Gauche-devel-jp] Re: Gauche の Windows での DLL 化
Date: Thu, 17 Jun 2004 22:35:42 +0900

> > メッセージで表示されているg++のコマンドラインから、-Wl,-h 
> > -Wl,gauche_core.dll
> > を削ったものを自分でコマンドプロンプトに入力してみるとどうなります?
> 
> 正常にビルドできるようです。

やっぱりこれですね。

> 逆に-Wl,-h -Wl,gauche_core.dll をつけると同じエラーが、オプションを一つずつ
> 削ると、それに応じて

ひとつづつ削るのは意味ないです。-Wlというのは、その後の引数をそのまま
リンカに渡すってものですから、-Wl,-h -Wl,gauche_core.dll というのは
リンカに -h gauche_core.dll を渡しているってことです。

従って、調べるべきところはリンカのマニュアルです。(g++とかgccは
単なるドライバで、入力ファイルとオプションに応じて下位のコンパイラや
アセンブラやリンカを呼んでいます。ので、リンクステージのエラーに
ついてはgccのマニュアルだけ見てても分からないことがあります)。

GNU ldだと、ELFバイナリを出す際に -h <soname> というオプションが
使えます。soファイルの名前を生成されるバイナリに埋め込むための
オプションです。類似の機能は他のリンカにもあるのですが、残念ながら
オプションが違ってて、 -soname <soname> だったり +h <soname>
だったりします。gccを使っててもリンカはGNU ldではなくシステム付属の
ものを使う場合もあるため、「gccだからこれ」と決め打ちすることが
できません。libtoolなどがものすごい苦労をしてるのはそのためです。

> とりあえずエラーが出たら、直接叩き込んで試してみるということにします。

というわけで、根本的な原因は、Boost.Buildがmingwのリンカについて
全く知らないか、あるいはmingwのリンカを使うということがBoost.Build
に伝わってないかのどちらかだと思います。それ以外の場当たり的対応は
解決にならないでしょう。

mingwで他のDLLがビルドできているとのことでしたら、後者の可能性
が高いと思うので、リンカのオプションというのをキーワードに調べて
みてはいかがでしょう。

--shiro






Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index