Snow Leopardでlibjpeg.dylibを使ったビルドがエラーに成る時の対処法
Leopardの環境で問題なくビルド出来ていたプログラムをSnow Leopard環境でビルドした所、以下の様なワーニング出て、このライブラリに関連する関数が見つからずにエラーが発生しました。
ld: warning: in /opt/local/lib/libjpeg.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
Mac Portsでインストールした libjpeg.dylib が i386 アーキテクチャでリンクできないというワーニング発生です。
今回のプログラムでは画像ライブラリのGDを使っているために libjpeg.dylib のリンクが必要だったのですがこちらを以下の様にLeopardの頃と同じ方法でインストールするとダメな様です。
sudo port install jpeg
zlibの場合
libjpeg に限らず、 zlib などでもよく同様の問題に遭遇する人が多いみたいでそちらの情報は沢山有りました。
zlib での解決方法はMac Portsで入れる時に +universal を付けてインストールするとOKな様です。
sudo port install zlib +universal
ibjpeg.dylibの場合
そして今回取り上げた libjpeg.dylib 、最初は zlib と同様に以下の様に +universal を付けてインストールしてみたのですが上手く行きませんでした。
sudo port install jpeg +universal
しかし、何とかこちらに対処方法を記載している方を見つけました。
Ben Heiskell's Blog: Mac OS X Snow Leopard Port Wine
http://etherealpanda.blogspot.com/2009/10/mac-os-x-snow-leopard-port-wine.html
この様に記述して実行すると良い様です。
sudo port upgrade --enforce-variants jpeg +universal
こちらを実行したところ今まで file コマンドで確認した場合に x86_64 しか含まれて居なかった libjpeg.dylib に i386 も追加されました。
[実行前]
$ file /opt/local/lib/libjpeg.dylib /opt/local/lib/libjpeg.dylib: Mach-O 64-bit dynamically linked shared library x86_64
[実行後]
$ file /opt/local/lib/libjpeg.dylib /opt/local/lib/libjpeg.dylib: Mach-O universal binary with 2 architectures /opt/local/lib/libjpeg.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 /opt/local/lib/libjpeg.dylib (for architecture i386): Mach-O dynamically linked shared library i386
関連サイト
--enforce-variants については以下のサイトに日本語で解説が有ります。
port(1) - Beginning OS X
http://osx.miko.org/index.php/port(1)
今回の事とは直接関係無いけど、メモとして…
libjpeg.dylib のコンパイル方法 - Cube の日記
http://slashdot.jp/~Cube/journal/363553