LoginSignup
9
8

More than 5 years have passed since last update.

Homebrewで入れたOpenCVをQtで使おうとしたらハマった話

Last updated at Posted at 2016-01-07

状況

Homebrew経由でインストールした OpenCVをゴリゴリ使って書いたプログラムを、せっかくだしGUI化しようと思いQtをダウンロード。 Qt Creatorを立ちあげ、Qt-Test.proを書いていざRun!ってところで次のような実行時エラーが発生しました。

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
プログラムが突然終了しました。

環境

  • MacOSX El Capitan 10.11.2
  • Qt 5.5.1
  • Qt Creator 3.6.0(Clang6.1 64ビット)
  • Homebrew 0.9.5

Qt-Test.proファイルは次のような感じです。

Qt-Test.pro
TEMPLATE = app
TARGET = Qt-Test
INCLUDEPATH += .

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib -lopencv_highgui -lopencv_core -lopencv_imgproc

HEADERS += mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp

対処法1(しかし未解決)

エラーで検索をかけると、こちらのサイトを発見。どうも Homebrewで入れたlibJPEG.dylibには__cg_jpeg_resync_to_restartという関数が定義されていないらしい。 そもそもなんでこれインストールしたっけな

ならばこいつをアンインストールしようとbrew uninstall jpeg(もしくはbrew uninstall libjpeg)を実行し、もう一度Runするも今度は次のようなエラーが・・・

dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
  Referenced from: /usr/local/lib/libTIFF.dylib
  Reason: image not found
プログラムが突然終了しました。

そりゃ見つからないよね…

対処法2

本来ならば/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylybをロードすべきところをQt-Test.proに書いたLIBS += -L/usr/local/libのせいでこちらのディレクトリを先に走査してしまい、 Homebrew経由でインストールしたlibJPEG.dylibをロードしてしまっているのがそもそもの問題なので、libJEPG.dylyb等は純正(?)のものを使用できるようにしたい。

そこで、 Homebrew経由でインストールしたライブラリ等へのシンボリックリンクが一括して格納されてある/usr/local/libではなく、生のディレクトリを読みに行くようにQt-Test.proを書き換えることにしました。下記のLIBS += -L/usr/local/Cellar/opencv/2.4.12/libがそれに該当します。

Qt-Test.pro
TEMPLATE = app
TARGET = Qt-Test
INCLUDEPATH += .

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/Cellar/opencv/2.4.12/lib -lopencv_highgui -lopencv_core -lopencv_imgproc

HEADERS += mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp

これで初めのエラーはなくなり、無事、Runできました。

結論

QtHomebrew経由でインストールしたライブラリ等を使用する際は、.proファイルには/usr/loca/libでなく各ライブラリが格納されている生のディレクトリをLIBSに与えた方がいい(かもしれない)。

参考サイト

としたにあんの左脳

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8