mozart-1.4.0がubuntu 8.10 amd64でコンパイルできない。
コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)
- 作者: セイフ・ハリディ,ピーター・ヴァン・ロイ,Peter Van-Roy,Seif Haridi,羽永洋
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/08
- メディア: 大型本
- 購入: 9人 クリック: 304回
- この商品を含むブログ (64件) を見る
最近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版を無理やり入れてしまうというのもありましたが…。