17 March '2006 - 23:40 | 技術動向 64ビット環境デビュー
仕事的には当分は関係ないだろうと高をくくっていた 64ビット環境。 ある客のせいで今日から使う羽目になった。AMD64 を Fedora Core で使ってるからそっちも同じ環境でよろしくね、とか客に言われて、嫌なこった、おれは Gentoo しか使わないって決めてるし、って言って初めて調べてみたら、ちゃんと Gentoo でも使えることがわかって安心。ほっ。
社内に AMD64 が余ってなかったので、Fry's に行ってみたら AMD64 なマシンが 600ドル以下で売っていた。安い。さっそくそれを買ってきて、さくっとを若者にインストールさせてみたのだけれど、なんか様子が違う。違うなあと思っていたら若者は旅に出てしまったので、仕方なく自分で解決することにした。
が、なんか、何がどうおかしいのかさえ、いまいちよく分からない。そもそも何も読まずに勘だけでやっても動くわけがないのだけれど、かるくググっても欲しい答えを教えてもらえないし、なんか面倒くさくなってきて、irc://irc.freenode.net/#gentoo-amd64 で訊いて見る。すると、
なにはともあれ IRC 住人の適切なアドバイスのおかげで、さくっと AMD64 環境が動くようになった。ついでに DirectFB も簡単に動いた。
で、さっそくテストアプリケーションを動かして見ようと思いきや、案の定、テストコードのコンパイルが通らない。まあ、そういうこともあるだろうね。
言われるまま、コンパイラのお気に召すように細かく修正してアプリケーションのコンパイルをなんとか通るようにしてみると、今度はライブラリのフォーマットが違うんでリンクできませんとか言われる。ああ、ライブラリもコンパイルしなおす必要があるわな、そりゃ。はいはい。
で、ミドルウェアのコンパイルを始めたら、当然ながらコテンパンにコンパイルが通らない(笑)
まあ、組込なのでビッグ・エンディアンの方が多いのだけれど、ST みたいにリトル・エンディアンみたいなのもあるし、さすがにエンディアンの違いで動かなくなるようなコードはひとつもないけれど、32ビット環境を「暗に」仮定して書かれているコードがちょくちょくありまくり。
うーむ。
まったく、そんなダサいコードを書くんじゃねーよって叫びたいところだけれど、テレビのソフトごときに 64ビット環境のことなんて想定するのはまったく現実的じゃないし、実際、今回の客にしても最終的な製品は 32ビット環境になるに決まっているし、なんと言ってもおれもそういうコードをけっこう書いてるのがイタイ orz
もうね、エラーの量がさくっと治そうって量じゃないのにめげる。さらに、この苦労はほとんど報われない(64ビットのテレビなんて近い将来には出っこない)ことも必定なので、よけいに気力がうせる。
仕方ないので、自分で書いたライブラリから片付けていこうと思って作業を始めると、半分くらいは何の問題なくビルドできたし、残りの半分の半分くらいはちょっとした手直しだけでよかったのだけれど、残りはちょっと真剣に治さないと副作用が怖いなあ、という感じ。とくに何年も前に書いたっきりほとんどそのまま使っているキューとかスレッドとかセマフォアあたりの低レベルのオブジェクトの実装が、ぱっと見では気づかないようなすごく微妙な感じで 32ビット環境仮定になってたりしてることを発見。
うーん、せっかくの花金を台無しにしてしまったかも。こういうのは、火曜日か水曜日あたりに気づくのが最適なのに。
で、あまりにもやる気にならないので、
$ cat > a.c; gcc a.c; ./a.outってやって、(・∀・)ニヤニヤしながらとっとと帰ることにした。
int main(void){printf("%d\n",sizeof(void*)*8);}
^D
64
$
いいなあ、嬉しいなあ、64ビット環境。