既に OpenCV を導入し Xcode から利用していたが、Homebrew で設定しなおす機会があったので、やったことをメモしておく。こうしたらできた!というメモなので、コマンド実行等は自己責任でお願いします。
環境は以下です.
- Max OS X 10.10.1 Yosemite
- Xcode 6.1.1
- OpenCV 2.4.12
導入
事前に brew doctor
を解決しておくと良いかも。問題がなければ、opencv を導入する。
1 2 |
|
既に OpenCV を導入している場合、過去のファイル群は邪魔なので撤去しなくてはならない。brew doctor
時点で影響を及ぼしそうなファイルはリストアップされるので、それらを削除するなりバックアップをとるなりしてから、シンボリックリンクを貼ると良いかも。
1
|
|
--force
オプションをつけてね〜的な warning が出るかもしれない。その場合は付加すれば実行できる。ただし、既存の OpenCV のシンボリックリンクを上書きすることになるので、注意。
Xcode で使う
Homebrew で導入した OpenCV の場所は /usr/local/Cellar/opencv
となる。Xcode から利用する場合は、適切な場所を参照するように設定を行う必要がある。以下、パス内のバージョンに関しては適宜置き換えること(今回の場合は2.4.12_2)。
ヘッダー及びライブラリの Search Paths
Build Settings
>Header Search Paths
/usr/local/Cellar/opencv/2.4.12_2/include
/usr/local/Cellar/opencv
にして、recursive に設定すると説明しているサイトがあったが、こちらの方が綺麗に見える
Build Settings
>Library Search Paths
/usr/local/Cellar/opencv/2.4.12_2/lib
OpenCV 導入済み & Xcode 設定済みだった場合は、既存の設定を削除するか、上記で設定したパスの優先度をあげる(リスト内で上方に移動する)と良いかもしれない。
ライブラリとのリンク
OpenCV をすでに導入し、Xcode で設定済みであった場合は、Build Settings
> Linking
> Other Linker Flags
にいろいろ設定されているかもしれないが、全部消す(と、自分の環境ではエラーがなおった)。
Homebrew で導入後にライブラリとのリンクを張るためには Build Phases
> Link Binary With Libraries
に、/usr/local/Cellar/opencv/2.4.12_2/lib
から必要なライブラリを追加する。Shitf + Command + G
から /usr/local/Cellar/opencv/2.4.12\_2/lib
と入力すれば楽。
トラブルシューティング
Undefined symbols
Undefined symbols for architecture x86_64:
みたいなエラーがドバッと出ることがある。
c++ - OpenCV Undefined symbols for architecture x86_64: error - Stack Overflow
OpenCV に必要なライブラリがリンクされていないことによるエラーのため、Link Binary With Libraries で必要なライブラリがリンクされているか確認する。
dyld: Library not loaded
Xcode における Build & Run 後に、以下のようなエラーが吐かれた。
1 2 3 4 |
|
/usr/local/opt
の libpng を読みに行ってるのが悪いのかな?そもそも /usr/local/opt
の OpenCV 見に行ってるけどなんでかな?と思っていたが、どうやら試した環境では、 /usr/local/opt
内の libpng、 opencv は Cellar 以下の各ソフトウェアへのシンボリックリンクになってるらしかった。Homebrew がやってくれてるんだっけ?わからん…
バージョンが低いと言われているので、brew update & brew upgrade
したら、とりあえず治ったけど、実際何が原因だったのかはわからなかった…
c++ - Error with homebrew + opencv + libpng - Stack Overflow