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を利用するプログラムで何か問題がでるかもしれません。注意してください。