続 C++ と libc の関係など

ちと深入りしすぎでは。と忠告を受けたので冷静に考えなおしていくつか検証をして結論を出した。

時間が多くあるならばやるべき正攻法

Mingw ではなく純粋なクロスコンパイラ i586-pe または i586-elf を作り開発する。そうすれば多くの問題は自動的に解決される。例えば libgcc や libsupc++ の libc への依存や _alloca 自動挿入問題など。

でもこれは 「Mona を一から開発するなら次はこうやろう」的な話であまり現実的ではない。少なくとも WebKit 移植よりは優先度が低い

今回試みて失敗したこと

C++ の RTTI と例外をサポートするには libgcc.a と libsupc++ とそれに含まれるヘッダが必要である。これは真。ところが使おうとしているのは Mingw の libgcc なので Windows 関数への依存や、libc への依存が問題になる。クロスコンパイラをきちんとつくっていればこれらの問題は起きなかったりそれ以前に解決されている。ただ Mona は歴史的経由により Mingwコンパイラ・リンカに -nostdinc などをつけてだましだましクロスコンパイラとして利用しているので深いところにツッコむと問題にぶち当たる。


Mingw gccソースコード一式は手元にあるのでソースに手を入れて一つ一つ依存を切っていくことも可能に見えたのだが、やはり色々難しくて断念した。Mona 用の純粋クロスコンパイラを作らない限りは C++ RTTI/例外 サポートは難しいというのが今のところの結論。

今回試みて得たこと

今回の失敗から得られたもは以下のとおり。

  • gcc 4.6.1 の Mingw 環境。 C++0x ?なども使える。
  • ロスコンパイラに関する知識
  • C++ と libc、libsupc++ の役割に関する知識

ICU の RTTI 問題はどうするか?

WebKitICU 依存の関数を列挙する。RTTI を必須としない古い ICU を調べて前述の列挙した関数とマッチングして合いそうであればそれを移植。