Leopard(MacOS X 10.5)のgccを使ってコンパイルしたバイナリは、そのままではTiger(MacOS X 10.4)上では動かないようです。
ちょっと検索したところ、10.4uのSDKを指定すれば良いことが分かりました。
ついでに、ユニバーサルバイナリを作る方法も調べてみたところ、次のようにすれば良いようです。
SDKを指定
まず、XCodeを入れるときに「カスタマイズ」で「10.4u SDK」をインストールしておく必要があります。(デフォルトでON?)
その上で、-isysrootオプションに10.4u SDKを指定します。
% gcc test.c -isysroot /Developer/SDKs/MacOSX10.4u.sdk ld: library not found for -lcrt1.10.5.o collect2: ld returned 1 exit status
あれ?
このページによると、どうやら、-mmacosx-version-min=10.4 も指定しないとだめなようです。
% gcc test.c -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 % ./a.out Hello,World!
今度はOK。
ユニバーサルにする
上記の指定に加え、-arch を複数指定します。
gcc test.c -arch i386 -arch ppc または gcc test.c -arch i386 -arch ppc -arch x86_64 -arch ppc64
後の方は、64bitにも対応させたい場合の指定。
% file a.out a.out: Mach-O universal binary with 4 architectures a.out (for architecture i386): Mach-O executable i386 a.out (for architecture ppc): Mach-O executable ppc a.out (for architecture x86_64): Mach-O 64-bit executable x86_64 a.out (for architecture ppc64): Mach-O 64-bit executable ppc64
そもそもコードが対応してない(ポインタをintにキャストしてるとか…)場合はNGですが。
当然指定を増やせば増やすほどバイナリのサイズも増えるので、そこら辺は要検討です。