In article <c1h6q9$qd5$1...@aribaba.minolta.co.jp>
Kawabata Kazuyuki <k-k...@tdc.konicaminolta.jp> writes:
> Zeta の話題ってここでいいんでしょうか?
はい。Zeta の話は、fj.os.beos でいいと思います。gcc 関連とい
うことで、fj.comp.lang.c にも振りました。
> Zeta では gcc-3 系が載っているそうですが、3 と 2 ではバイ
> ナリ互換がないという話を聞きます。いったいどうやっているの
> でしょうか?
Zeta の話はよくわからないので、一般話として。
コンパイラで互換というと、引数の受け渡し方が変更されたという
ことですかね。あるいは、オブジェクト・コード(.o) の形式が変
更されたか。
最近、インテルのCコンパイラが gcc 互換になったと聞いた
(Linuxのカーネルもコンパイルできるようになった)というのは、
この引数の渡し方などを統一したということですか?
> R5 用バイナリは実行できるけど、R5 用にビルドできないということでしょうか?
動的リンクを使っていれば、問題が起きるかもしれません。普通は
昔のライブラリも入れて置くなどするので平気なんでしょうけれど。
Solaris なんかいまだに SunOS のバイナリ動いたりしますし。
> また、R5 や Dano で動作する gcc-3 はないんでしょうか?
ソース持ってきて configure して make したら、動かすだけなら
動くんんじゃないですか。ただ、そうして configure した結果と
OS標準のものが一致するかどうかは別の話なので、実際問題困る
かもしれません。
この間、OpenSSL 0.9.7c を使おうかとおもって Solaris のバイナ
リを見たらlibgcc_s.so.1 がいるから gcc 3 が居ると書いてあり
ました。でも実際にソースからコンパイルしたら、別に gcc 2 で
もコンパイルできました。そんなものかもしれません。
ところで、libgcc_s.so.1 って何なんでしょうか?
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
さらに 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日(木) 今日のマーフィーの法則 [コリンズの学会の原理]
もっとも単調な声の持ち主が食事のあとにスピーチをする。
> この間、OpenSSL 0.9.7c を使おうかとおもって Solaris のバイナ
> リを見たらlibgcc_s.so.1 がいるから gcc 3 が居ると書いてあり
> ました。でも実際にソースからコンパイルしたら、別に gcc 2 で
> もコンパイルできました。そんなものかもしれません。
コンパイル時に gcc-3 が必要という意味ではなく、実行時に必要ということです。
> ところで、libgcc_s.so.1 って何なんでしょうか?
shared object に必要とされている shared object みたいです。
% dump -Lv libstdc++.so
libstdc++.so:
**** DYNAMIC SECTION INFORMATION ****
.dynamic:
[INDEX] Tag Value
[1] NEEDED libm.so.1
[2] NEEDED libgcc_s.so.1
[3] NEEDED libc.so.1
[4] INIT 0x2d310
[5] FINI 0x2d32c
[6] SONAME libstdc++.so.5
[...]
% dump -Lv libg2c.so
libg2c.so:
**** DYNAMIC SECTION INFORMATION ****
.dynamic:
[INDEX] Tag Value
[1] NEEDED libm.so.1
[2] NEEDED libc.so.1
[3] NEEDED libgcc_s.so.1
[4] INIT 0x63a4
[5] FINI 0x63c0
[6] SONAME libg2c.so.0
--
Hiroshi Fujishima