ライブラリをユニバーサルバイナリでインストールする

以下のサイトが詳しい

http://macwiki.sourceforge.jp/wiki/index.php/UniversalBinary

Imager に必要な libjpeg などをユニバーサルバイナリにしてみた時のメモ

-M などがついていて -arch が複数指定できない場合以外は

CFLAGS='-arch x86_64 -arch i386 -isysroot /Developer/SDKs/MacOSX10.6.sdk' CXXFLAGS=$CFLAGS

とかすればいいということだが、libjpeg-M られていて無理だったので、amd64 と i386 という二つのディレクトリにソースコードを展開、それぞれ以下のオプションで make まで終わらす:

$ cd amd64
$ CFLAGS='-arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk' CXXFLAGS=$CFLAGS ./configure ...
$ make

$ cd ../i386
$ CFLAGS='-arch i386 -isysroot /Developer/SDKs/MacOSX10.6.sdk' CXXFLAGS=$CFLAGS ./configure ...
$ make

make されてできたバイナリを lipo コマンドでユニバーサルバイナリ化する。 上記サイトを参考にして、

#!/bin/sh

filelist=$(find ./amd64 -type f |grep -v \\.o$ | xargs file | sed -e 's,^\./amd64/,,g' | \
               grep -E \(Mach-O\)\|\(ar\ archive\) |sed -e 's,:.*,,g' -e '/\for\ architecture/d')

for i in $filelist
do
    echo $i
    /usr/bin/lipo -create amd64/$i i386/$i -output `basename $i`
    mv -f `basename $i` amd64/$i
done

このようなスクリプトを書いて、amd64 などのディレクトリの一つ上の階層で実行すると、amd64 ディレクトリのバイナリがユニバーサルバイナリ化されるという仕組みを作ってみた。

その後、amd64 のほうで make install してやれば OK。

by typester / at 2010-01-08T11:28:00 / osx / Comments(0)