さらに 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 高津正道 ta...@doga.jp
TBD0...@nifty.ne.jp
PROJECT TEAM DoGAのホームページ → http://doga.jp/
2月26日(木) 今日のマーフィーの法則 [コリンズの学会の原理]
もっとも単調な声の持ち主が食事のあとにスピーチをする。
<0402261035...@XP.doga.jp>の記事において
ta...@doga.jpさんは書きました。
>> うろ覚えですが、Zeta の API って C++ で書かれてましたよね。
そうです。
C++ でなければ GUI のプログラムは作れません。
>> 以下は想像ですが、対策としては
>> ・gcc3 の方では、mangling 規則をgcc2に合わせる
>> (-fname-mangling-version-0 をつける)
試しに cygwin の gcc version 3.3.1 (cygming special) でやってみると、
cc1plus: warning: switch "-fname-mangling-version-0" is no longer supported
と表示されました。
作成されるオブジェクトはオプションの有無で変わりはありませんでした。
(cygwinだからでしょうか?)
# ソースを検索しても有効な処理がなさそう?
>> ・API のライブラリの方に wrapper を用意していて、gcc2 と gcc3 の
>> どちらの mangling 規則でも link 出来るようにしている
>> のどちらかだと思います。
というわけでこっちなんでしょうか。
# R5 でがんばらずに素直に Zeta 買えってことかな…。
--
川端一之
E-mail:k-k...@tdc.konicaminolta.jp