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/