Flat Leon Works

アプリやゲームを作ってます。

Macでビルドした実行ファイルが、libJPEGが原因で落ちる場合の対処法

久しぶりにMacでビルドしたプロジェクトが以下のようなエラー出力とともに実行時に落ちるようになっていました。

dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

この原因は、Macの何かのフレームワークが本来のlibJPEGとは別のlibJPEGを使用(リンク)してしまっているからのようです。そして、その別のlibJPEGとはHomebrewでインストールしたものらしい。

対処法として、HomebrewでそのlibJEPGをアンインストールすればよいというのを見かけましたが、手元でアンインストールを試みたところ、他のパッケージから使われているっぽいので止めておきました。

他の対処法として、シンボリックリンクを付け替えるというのがあり、今回はそちらで対処しました。ターミナルで以下のように操作します。一応操作前のlibjpegを.backupで残すようになっています。※このコードはこちらに載っていたものです。

cd /usr/local/lib
mv libjpeg.dylib libjpeg.dylib.backup
ln -s /System/Library/Frameworks/ImageIO.framework/Resources/libJPEG.dylib libJPEG.dylib
mv libtiff.dylib libtiff.dylib.backup
ln -s /System/Library/Frameworks/ImageIO.framework/Resources/libTIFF.dylib libTIFF.dylib
mv libpng.dylib libpng.dylib.backup
ln -s /System/Library/Frameworks/ImageIO.framework/Resources/libPng.dylib libPNG.dylib

これでとりあえず実行できるようになりました。ただし、この方法はシンボリックリンクを付け替える前のlibJPEGを利用するプログラムで何か問題がでるかもしれません。注意してください。

参考