高津@ドーガです。

さらに fj.comp.lang.c++ にもふります。

記事 <c1h6q9$qd5$1@aribaba.minolta.co.jp> で
        Kawabata Kazuyukiさんは書きました

> > Zeta では gcc-3 系が載っているそうですが、3 と 2 ではバイ
> > ナリ互換がないという話を聞きます。いったいどうやっているの
> > でしょうか?

うろ覚えですが、Zeta の API って C++ で書かれてましたよね。

gcc の 2 と 3 では、関数名の mangling 規則が変わってます。ですから、
C++ なコードをコンパイルした場合、シンボル名に互換性が無いので
そのままでは混在させて link できないですね。

(C++でコンパイルした場合、オブジェクトレベル(.o)で互換性が無い。
ダイナミックリンクの場合には、実行ファイルレベルでも互換性が無くなる)

以下は想像ですが、対策としては
・gcc3 の方では、mangling 規則をgcc2に合わせる
  (-fname-mangling-version-0 をつける)
・API のライブラリの方に wrapper を用意していて、gcc2 と gcc3 の
  どちらの mangling 規則でも link 出来るようにしている
のどちらかだと思います。

PROJECT TEAM DoGA 高津正道                            taka2@doga.jp
                                                   TBD00456@nifty.ne.jp
                     PROJECT TEAM DoGAのホームページ → http://doga.jp/
2月26日(木) 今日のマーフィーの法則    [コリンズの学会の原理]
もっとも単調な声の持ち主が食事のあとにスピーチをする。