gcc をバージョンアップ

ふと思いついて、BeOS 版開発環境の gcc を新しいのに入れ替えてみることにしました。
BeBits にある gcc-2.95.3-beos-070218です。
以前にもそれを考えたことがあったんですが、BeOS 環境が 1 つしかなく、その環境の構築にも苦労していたので、入れ替えて問題があって元に戻せなかったら嫌だなあという思いがあって実行していなかったのでした。今回、VMware Player の仮想マシンで BeOS の開発をできる環境ができたので、すぐに元に戻せるという気楽さからやってみました。

入れ替え自体は README に書かれているとおりで簡単にできたのですが、それで CoveredCalc を make して実行すると Segment Violation になりました。
最適化を OFF にするとこの問題は発生しません。それで、このページを見たところ、どうやら、
・Be コンパイラは、自動的に生成された関数を、それが使われているところのオブジェクトファイルに入れる。これは gcc でいうところの multiple symbol spaces。
・このバージョンの gcc は最適化が OFF のときのみ multiple symbol spaces を使う。
・古いコンパイラでは dynamic_cast などで生成される typeinfo-functions が使っているオブジェクトファイルに入っていたが、このバージョンでは最適化時に single symbol space を使うので‥‥。
・(※私の英語読解力が低いのでよくわからないが)、Beライブラリが持ってる BDirectWindow-typeinfo-function が変なので困ると。

それで、この gcc にはなんか対処は入ってるみたいなんですが、それでも CoveredCalc は落ちているわけで、ためしに multiple symbol spaces を強制してみました。(コンパイルオプションに -fmultiple-symbol-spaces を追加)
すると落ちなくなりました。ばんざーい。

で、実際にこっちの gcc を使うかどうかについてはまだ悩むなぁ。
[PR]
by hironytic | 2008-05-05 11:18 | 近況
<< Subversion のビルドとか BeOS R5 on VMwa... >>