Mach-O
自分が使っている Mac での実行ファイルについて。Mac OS X にはユニバーサルバイナリーという仕組みがある。
- Mach-OとUniversal Binaryの詳細 http://www.itmedia.co.jp/enterprise/articles/0711/30/news014_3.html
- WikiPedia(en) Mach-O http://en.wikipedia.org/wiki/Mach-O
ふっと「gcc ってユニバーサルバイナリーを作れるのか?」と疑問に思った。/usr/bin/gcc は Apple が拡張?した gcc で、Apple の Xcode 開発環境は、コンパイラにこの gcc を使うのだから作れるはずだ。man gcc を参照すると、-arch という APPLE ONLY と指定されたオプションがあった。hello world を C で書いて、gcc -arch ppc と gcc -arch ppc -arch ppc64 で違いを見てみる(-arch i386 は自分の環境ではエラーになった)。
- 確かに後者は実行ファイルのサイズが2倍くらいになっている
- od -x でバイナリの1行目を調べると、上記の itmedia の記事にあるとおり、 cafebabe や feedface, feedfacf というマジックナンバーがちゃんと埋め込まれている。
なるほど。
かなり遠い目標としては、 Movitz の binary-types ライブラリーを使って、 Mach-O を直接書いてみる、こと。