macOS Sierra下 ‘QTKit/QTKit.h’ file not found的解决方法

在安装opencv时如果升级了macOS Sierra可能会遇到如下错误:

   XXX/cap_qtkit.mm:46:9: fatal error:
   'QTKit/QTKit.h' file not found
   #import
    ^
   1 error generated.
   make[2]: *** [modulesideoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1
   make[1]: *** [modulesideoio/CMakeFiles/opencv_videoio.dir/all] Error 2
   make: *** [all] Error 2

原因是OS X 10.12在升级过程中将原有的QTKit.framework进行了更改,移除了部分文件,如果进入对应路径可以看到Apple提示将QTKit升级为AVKit。

解决方法:从未升级到10.12的Mac中复制QTKit.framework,移动到

   /System/Library/Framework

但是想进行该操作会遇到一个问题,无论怎么移动都无法成功,sudo,chmod都不行。

原因是OS X El Capitan中,在内核下引入了Rootless机制,以下路径:

   /System
   /bin
   /sbin
   /usr (except /usr/local)

都是无法写入的。

为了实现该操作,需要重启,开机按住Command + R,以Recovery分区启动

接着进行命令行操作:

   csrutil disable
   mv -f ~/Desktop/QTKit.framework /System/Library/Framework

或者shift+commmand+g进入/System/Library/Framework接着手动删除,然后将从低版本QTKIT.framework获得的拖入。

完成操作后要将系统保护开启,按照原方法进入恢复模式下命令行,输入:

   csrutil enable

还有更简单的操作,直接从别处获取编译好的opencv,然后在命令行输入:

   brew link opencv

这样即可使用opencv。