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