mozart-1.4.0がubuntu 8.10 amd64でコンパイルできない。

コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)

コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)

最近CTMCPを読んでいるので、mozartをインストールしてozを書いてみようとしたのですが、結局断念しました。

ubuntu 8.10 amd64にはパッケージがなかったので、tarballからの導入を試みてみました。一つ分かったのがmozart-1.4.0のコードではLP64を想定していないようで、例えば以下のような感じのコードが結構あります。(mozartにあるコードではなく、説明のために書いたダミーのコードです)

DummyType * ptr = NULL;
printf("dummy type %d\n", (int)ptr);

ようするにポインタとintのサイズが同一であることを前提としているのに対し、amd64はLP64であるためポインタは64bitでintは32bitであるという不一致がコンパイルエラーになってしまいます。コンパイルエラーを消す事だけを考えるとintでキャストしている部分をintptr_tでキャストするようにすればいいのですが、%dと型が一致しなくなってしまい、amd64の場合に限れば、intptr_tと%ldを使えばいいのですが、そうするとx86では正しくなくなるので、結局どうするのが正しいのか分からず深追いしてません。(iostreamを使うのがC++的に正しいかも)
その他、リンク時にvtableのrelocationでエラーになったりもして、だんだん手に負えなくなってきたので断念しました。

webをみてるとx86版を無理やり入れてしまうというのもありましたが…。