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

アーカイブの一覧に戻る

shelarcy shela****@capel*****
2004年 6月 18日 (金) 12:04:47 JST


どうもおかしいなと思っていろいろと調べてみた結果、勘違いしていたこと
が分かりました。boost_1_31_0 の Boost.Build v1 では mingw で正常に dll
を作れるものの、v2 では dll を作るのに失敗するみたいです。

On Thu, 17 Jun 2004 04:01:40 -1000 (HST), Shiro Kawai <shiro****@lava*****> 
wrote:
>> 逆に-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などがものすごい苦労をしてるのはそのためです。

なるほど、だから v1 ではきちんとできていたのに v2 ではミスっているん
ですね。

>> とりあえずエラーが出たら、直接叩き込んで試してみるということにします。
>
> というわけで、根本的な原因は、Boost.Buildがmingwのリンカについて
> 全く知らないか、あるいはmingwのリンカを使うということがBoost.Build
> に伝わってないかのどちらかだと思います。それ以外の場当たり的対応は
> 解決にならないでしょう。
>
> mingwで他のDLLがビルドできているとのことでしたら、後者の可能性
> が高いと思うので、リンカのオプションというのをキーワードに調べて
> みてはいかがでしょう。

その辺りの知識も欲しくなくて、安易にすぐに Boost.Build に頼ろうとした
のが裏目にでてますね。
v1 が同梱されていることから分かるように、v2 自体まだ stable なもので
はないので、この辺りの知識はやっぱり必要に応じてチェックしなければな
りませんね。

現在の CVS HEAD では v2 そのものが動かなくて試しようがないのですが、
今後こういうエラーに再現性があった場合には次バージョンまでに修正され
るように boost-build 開発チームに問い合わせてみます。
(いずれ boost-build の開発チームにも参加しないといけないかも……)

アドバイスありがとうございます。

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



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