こんにちは。れいじです。
先日OpenCV関係のエントリを書いたので、またそれに関係ある感じで。
OpenCVを用いたiPhoneアプリを作成していて、詰まりに詰まりまくって3時間を無駄にしてしまいました。貧弱!貧弱ゥ!
しかも先日書いたエントリ通りに設定してもビルドが通らないというアレレな結果にもなりました。なんじゃそりゃ。
いやぁしかし、OpenCV関係で検索をかけるとこのブログが出てきて、それに釣られるように全く関係のないエントリまで出てきて羞恥プレイ以外の何物でも無いですね。つらい!
さて、今回詰まったところですが
・実機でビルドができない(iPhone5, iOS6.0.1)
からの
・opencv2.framework側にエラー×3
これじゃ楽しいサンプルも動かせませんね。さっさと取り除いていきましょう。
・実機でビルドができない
エミュレータでは動くときもあるそうですが、私の環境では実機もエミュレータも関係なしにエラーを吐いて来ました。悲しいですね。
さて、先日書いたエントリをいじっていきます。
まずはopencv2.frameworkをプロジェクトに追加していきます。
追加できたら、opencvを使うためにopencv.hppをインクルードします。
[PROJECT_NAME]-Prefix.pchを開いて、インクルードしましょう。
さて、次は先日のエントリの問題部分を解決していきます。
やはりコンパイラが良くなかったらしい。
opencv2.frameworkはarmv7sに対応していないため、忘れずに削除しておきます。
そしてコンパイラ部分。
C Language Dialect -> GNU99 [-std=gnu99]
C++ Language Dialect -> GNU++11 [-std=gnu++11]
C++ Standard Library -> libstdc++ (GNU C++ standard library)
デフォルトだとC++ Standard Libraryを変更するだけでこのように設定できるかと思います。
後はC++を記述したコードの拡張子を.mmに変更して、終了
さて、ここまでは以前のエントリ通りです。ビルドしてみましょう。
background_segm.hpp
なんだこれ…
objdetect.hpp
なんだこれ…
ビルドできない・・・
この2つはどちらともopencv2.frameworkに含まれているヘッダファイルです。
そう、自分のコードに間違いはないのです。
いや寧ろ自分が書いていないので困窮を極めましたけども。
これで3時間ほど悩みました。
opencv.hppを読みこませる順番を一番最初にしてみたり、コンパイラを変えたり色々してみましたが一向に消えません。なんだこれはー
結論を言うと、「OpenCVに関係のあるコードが記述されたファイルだけ拡張子を.mmにしていたこと」がマズかったようです。
つまり、すべてのObjective-Cソース(*.m)ファイルの拡張子をObjective-C++(*.mm)に変えれば万事解決でした。
どういうことなの…
ということなので全ての.mファイルの拡張子を.mmに書き換えます。
Supporting Filesの中にあるmain.mも忘れずにね。
これで無事ビルドすることができました!よかったよかった。