binarian

2008年07月30日

Gauche.frameworkを作ろう(+使おう)

-arch i386 -arch ppc

Universal Binary、即ちIntelおよびPowerPCマシンの両方で走るバイナリを吐くオプション。

-arch i386 でコンパイルしたIntel用バイナリと -arch ppc でコンパイルしたPowerPC用バイナリを後で lipo(後述)でくっつけることもできる。(そうしたい場合もある)

cc -c -arch i386 -arch ppc hoge.c
でコンパイルのみを行う(リンクなし)と、hoge.o(オブジェクトファイル)自体もユニバーサルになっている。これをリンクする場合にも
cc -o hoge -arch i386 -arch ppc hoge.o
のように同オプションが必要。さもないとビルドした環境用のバイナリしかできないようだ。



-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4

OS X 10.4以降で動かしたいバイナリを10.5上でコンパイルする場合に必要なGCCのオプション(Mac用)。

-mmacosx-version-min=10.4なしでビルドしようとすると dylib1.10.5.ocrt1.10.5.o がないと言われる場合があり、そこで

% cd /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/
% sudo ln -s dylib1.o dylib1.10.5.o
% sudo ln -s crt1.o crt1.10.5.o
とかすればとりあえずビルドは通るが、10.4で動かした時に落ちる場合がある。(落ちない場合もある)

-mmacosx-version-min=10.4 を付けると、上記のようなシンボリックリンクでお茶を濁す必要がなくなる。



0xCAFEBABE

デバッグ中にファイルをダンプしていて、Mac OS Xの実行ファイルも先頭4バイトが

CA FE BA BE
になっていることに今さら気づいた。「も」というのは、ご存知のようにJavaのクラスファイルもそうだから。



lipo

異なる実行環境のバイナリファイルを束ねて1つにしたり、ばらしたりするツール



(12:33) Φ