MacOSX SierraでOpenCV3がビルドできない場合の3つの対処法

久々にOpenCVをビルドしようとしたら3つ引っかかりうまく行かなかったので、対処法を書いておきます。

元々の参考になるOpenCVが出してるMacでOpenCV3系をビルドする方法はこれです。

ただ、残念ながら今はこれではうまくいかないです。
Cmakeでconfigureとgenerateしたまではいいけど、makeでコケるようになりました。

問題1) fatal error: ‘sys/types.h’ file not found

このようなエラーが出ます

[  0%] Building C object 3rdparty/zlib/CMakeFiles/zlib.dir/adler32.c.o
In file included from /projects/opencv/3rdparty/zlib/adler32.c:8:
In file included from /projects/opencv/3rdparty/zlib/zutil.h:22:
In file included from /projects/opencv/3rdparty/zlib/zlib.h:34:
/projects/opencv/build/3rdparty/zlib/zconf.h:423:14: fatal error: 'sys/types.h' file not found
#    include <sys/types.h>      /* for off_t */
             ^
1 error generated.
make[2]: *** [3rdparty/zlib/CMakeFiles/zlib.dir/adler32.c.o] Error 1
make[1]: *** [3rdparty/zlib/CMakeFiles/zlib.dir/all] Error 2
make: *** [all] Error 2

これはXcodeのコマンドラインツールに関係したエラーです。
シェル上で以下のコマンドを実行してXcodeのコマンドラインツールをInstall or Updateすれば大丈夫です。

xcode-select --install

これで1つ目は通過。次にこのエラーが出ます

問題2) modules/videoio/src/cap_qtkit.mm:46:9: fatal error: ‘QTKit/QTKit.h’ file not found

[ 46%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o
/projects/opencv/modules/videoio/src/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found
#import <QTKit/QTKit.h>
        ^
1 error generated.
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2

これはQTKitが見つからないというものです。
CMakeでQT関係のチェックを入れて無くてもこれが出ます。
これはOpenCV3.0.0やOpenCV3.1.0などを使っていると出て来るエラーです。
QTがないとかじゃなくて、パスの問題らしいです。
それ以降のmasterブランチかそれより新しいOpenCVが出ている場合は(2016/12/19では3.1が最新)それを使えば大丈夫です。
gitでopencvを持ってきている人はmasterかそれより新しいバーjンををチェックアウトして再度やり直せばOKです。

問題3) modules/python/src2/cv2.cpp:6:10: fatal error: ‘Python.h’ file not found

[ 99%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
/projects/opencv/modules/python/src2/cv2.cpp:6:10: fatal error: 'Python.h' file not found
#include <Python.h>

99%までいってエラーです。しょげないでくださいね。
Python.hが見つからないエラーです。
解決策は2つあります。

  1. 正しいパスを与える
  2. opencv_python2をそもそも不要にする

まず1ですが、python.hの場所が間違ってるだけなので

export C_INCLUDE_PATH=/System/Library/Frameworks/Python.framework/Headers

のように正しいパスを与えればOKです。
もしくは「いや、pythonからopencvつかわないし。」というのであれば
CMakeにおいて
「BUILD_opencv_python2」のチェックを外してconfigure->generateすればそもそもビルドされないのでOKです。