ライブラリをユニバーサルバイナリでインストールする
以下のサイトが詳しい
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。