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的包進行恢複,然後重新再安裝ffmpeg
port 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就安裝完成了。。。
之後再執行毫無問題,順利安裝完成
之後再按照之前配置環境的步驟,我居然發現還是和之前一樣的問題(詳見1,2),我郁悶了,然後仔細研究了下XCode的選項,果斷把C++ Language Dialect 改成GNU98
然後成功編譯通過,連結通過
簡單的載入了一張圖檔,然後顯示出來,毫無問題,是以我懷疑,到問題2的時候就可以用這個方法進行解決的
終于搞定OpenCV了,慶祝下,嘿嘿