再转一篇Xcode+OpenCV
From: http://blog.csdn.net/fsseven/article/details/7958392
Mac上OpenCV环境确实各种麻烦。。。也可能是我不熟悉的关系。。。总之,折腾了我N久才搞定。。。
linux和windows上也没那么纠结。。。
下面说一下我在配置环境中碰到的问题和解决的方法吧
对于mac上开发C++来说,最常用的一个东西就是MacPorts(http://www.macports.org/index.php)
用了下这个东西,感觉它应该就是一个toolchain,或者说,有点像ubuntu的软件包管理器的东西,各种在开发中需要用到的库或者开发环境都可以从里面获得,而且是傻瓜式安装,傻瓜式管理
那么,如何安装macports?这个其实官方文档或者网上都能搜到,在这里我就简单介绍下
1. 从官网(上文已经给出)下载最新的MacPorts安装包,然后解压
2.执行基本的安装三部曲:
cd #解压出来的文件夹#
./configure
make
sudo make install
3.三步完成后,会提示你把路径添加到$PATH,忘记记录默认路径是什么了,我是直接找到相关文件复制到/usr/bin/下面,这样就不用改PATH了
(修改PATH的方法主要就是用 export 语句修改 )
这样,MacPorts就算安装完成了
现在在控制台输入port以后,应该就会进入MacPorts的控制台了,当然我们不需要进入,输入quit,回车后退出MacPorts的控制台
当MacPorts安装完成以后,接下来别先急着下载OpenCV,我们还需要对MacPorts进行更新
执行:
sudo port -v selfupdate
等待完成
好了!一切准备就绪,我们可以开始安装OpenCV了!
执行: sudo port install opencv 耐心等待完成。。。 到这里,恭喜你!完成了OpenCV的安装。。。但是。。。显然还没有完。。。 因为,如果不在XCode里进行环境配置的话,我们无法使用OpenCV,配置环境过程其实还是比较简单 用过Visual Studio的应该都很清楚,无非指定头文件和lib库的地址 因为使用MacPorts安装OpenCV的话,默认头文件路径是在/opt/local/include,默认库文件是在/opt/local/lib中 所以我们新建一个控制台程序,指定语言为C++ 然后在XCode里分别把这些填上 最后 #include<cv.h> #include<highgui.h> 编译,运行 大功告成!!! 嗯。。按照网上的教程(http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port) 应该是这样的,但是,实际上你发现可能没那么好运,那么我来讲一下我实际碰到的一些问题吧 1.Ctrl+B(编译)以后提示,找不到opencv2下的一个什么core.h(忘记名字了。。:P) 这个应该是最初会碰到的一个问题 我的解决方法是同时包含 /opt/local/include /opt/local/include/opencv 2.头文件包含的问题解决后,再编译,发现还是有错。。。而且还是一大串。。。我碰到的时候吓了一跳。。。然后上网各种查 网上主要说原因是XCode默认不使用C++11的库,而opencv里使用的unordered_map是C++11里才有的,需要在项目属性里C++ Library里选择那个with C++11 Support的选项 那么,我就乖乖的选了。。。然后。。。嗯,不错,错误确实减少了,只有一个了。。。可是。。。这个错就百思不得其解了,好像是一个变量没定义 网上压根没有这个问题的解决办法。。。然后再拼命搜。。。经过一系列折腾后(这个折腾一会儿细说)我成功了。。。 我最终猜测其实不用选择with C++11 Support 而是只要把C++ Language Dialect选为GNU98就好了,它不支持我们不用还不行嘛。。 3.这里就说下我绕的圈子吧 因为我卡在之前提到的那个变量未定义的问题上,所以我就又开始找原因了。。。 然后找到这篇文章 http://stackoverflow.com/questions/8552839/compile-opencv-2-3-1-for-os-x-lion-mountain-lion-with-xcode 这里面提到,在10.8+XCode 4.3.2 安装OpenCV需要加参数 执行:sudo port install opencv configure.compiler=llvm-gcc-4.2 那么我就uninstall了opencv重新加了参数安装。。。 这次奇葩了。。。 先是装到python2.7的时候提示无法激活,要强制激活,好吧。。那就强制激活。。。 然后装到ffmpeg的时候。。。居然告诉我。。。无法安装(看日志好像是ffmpeg无法识别我们指定的架构)。。。好吧,又是一通搜,终于被我找到了!!!
http://d.hatena.ne.jp/zariganitosh/20100828/macport_x86_64 这边文章的大意就是,先备份已安装的ports的列表,然后彻底删除所有安装的ports,从网上下恢复ports的包进行恢复,然后重新再安装ffmpegport installed > myports.txt sudo port -f uninstall installed sudo port clean --work --archive all //我执行这句提示没有--archive参数,我就删掉了,只执行 sudo port clean --work all,好像没影响
curl http://svn.macports.org/repository/macports/contrib/restore_ports/restore_ports.tcl -o restore_ports.tcl //这里可能是恢复ports的一个脚本 chmod +x restore_ports.tcl sudo ./restore_ports.tcl myports.txt
sudo port install ffmpeg 慢慢等。。。然后ffmpeg就安装完成了。。。 之后再执行毫无问题,顺利安装完成sudo port install opencv configure.compiler=llvm-gcc-4.2
之后再按照之前配置环境的步骤,我居然发现还是和之前一样的问题(详见1,2),我郁闷了,然后仔细研究了下XCode的选项,果断把C++ Language Dialect 改成GNU98
然后成功编译通过,链接通过
简单的载入了一张图片,然后显示出来,毫无问题,所以我怀疑,到问题2的时候就可以用这个方法进行解决的