LoginSignup
4

More than 5 years have passed since last update.

XCode8 + OpenCV3.1.1以降のUIImageToMat,MatToUIImageでMach-O Linker Error

Last updated at Posted at 2017-05-25

今回ハマった件

XCode8.3.1 + Swift3.1 + OpenCV3.2の環境でopencvをpodでプロジェクトにインストールした状態でWeb上で紹介されているOpenCVのサンプルを色々と修正し、あとはMach-O Linker エラー を残すのみとなったのですがこれについて結構ハマりました・・・。
内容はUIImageToMat関数とMatToUIImageのリンクエラーです。
結局の所 opencv2/imgcodecs/ios.hに定義されているのに、3.1.1以降では実体の部分が入らないみたいです。

2017/06/24 追記
includeに以下のように素直に追加するだけでもいける場合があるようです。
私の入れた時は無理だったと記憶してたんですが、インストールするフレームワークを作成した時のコンパイルオプションとかに依存するかもしれません。

OpenCVWrapper.mm
#import <opencv2/imgcodecs/ios.h>

で、まあ当初私の行った無理くりバージョンは以下です。

UIImageToMatとMatToUIImageの実体は探すと以下にあります。
https://github.com/opencv/opencv/blob/master/modules/imgcodecs/src/ios_conversions.mm

今回はめんどくさかったのでのソースをそのままプロジェクトに入れてやりました。
で、先頭のimport郡の中の、precomp.hppがないとエラーになるのですが、ここも強引にコメントアウト。

ios_conversions.mm(変更前)
#import <ImageIO/ImageIO.h>
#include "opencv2/core.hpp"
//#include "precomp.hpp" →コメントアウト

そしておもむろにBuild Clean→Build。

これでエラーが出なくなりました・・・。

まあ本記事のエラーだけでなく、実際はSwift3の文法に書き換えたり、iOS10からdeprecatedになった関数の置き換えをしたりとかなりめんどくさかったのですが・・・orz

何かの足しになれば・・・

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
4