T____T~~~~~~~~~~ 僅記錄我在Xcode裏搭建OpenCV踩過的坑,這個過程特別曲折,本人從19/3/25到19/3/29足足花了五天才配置好這個環境orz。。。中間經歷過無數次找死的操做,且聽我慢慢講來。html
本人開始搭建環境時使用的是 10.11 El Capitan版本的MacOS,但此時蘋果的系統最新版已經到 10.14.4 Mojave。我先像之前使用Windows系統同樣登錄官網https://opencv.org/releases.html下載Mac版本的安裝包,解壓後發現只有源碼,根本沒有動態連接庫。而後我上網搜索了MacOS下帶庫文件的OpenCV的安裝,查到用Homebrew安裝的OpenCV就自帶動態連接庫。而後我照着流程安裝了Homebrew(當時有一個提醒是個人操做系統版本太低,由於安裝的是最新版Homebrew,可能在以後的使用中會出現必定的問題,我當時每當一回事兒,但後面我才發現這纔是阻礙我配置環境的最大的阻礙。。。。。),而後使用brew install opencv命令安裝,結果在安裝opencv軟件包依賴的庫文件pcre時,發生了錯誤,系統提示該軟件在make test的過程當中出現了編譯錯誤。由於想到了以前的提示,我想多是由於這個最新版的pcre和個人操做系統不兼容,那否則我下載個較低版本的pcre包好了(這想法應該沒錯),而後我確實就去官網https://ftp.pcre.org/pub/pcre/ 下載了一個較低版本的pcre(我真是傻,由於後來我發現還有其餘辦法,我後面會提到,大家能夠試試),根據PCRE的安裝及使用這篇文章和/Users/'your username'/Library/Logs/Homebrew/pcre/03.make的參數設置從新編譯安裝了pcre軟件包,而後從新執行brew install opencv命令,結果發現本身安裝的pcre包Homebrew根本就識別不了,它會報錯而後建議你reinstall pcre。而後我用盡了各類方法企圖讓Homebrew正確識別我安裝的pcre,但因爲一時心急,不當心使用錯命令行把/usr/local/bin文件夾及其文件刪除,後面花費3個小時使用 find / -name 'your file name' 命令在系統中一個個查找原文件位置而後拷貝回/usr/local/bin文件夾而後使用時被告知 Error: Permission denied,而後使用搜索引擎發現一個解決方案:sudo chown $(whoami) /usr/local/bin (chown——更改文件或目錄的所屬用戶),可是始終內心有點不舒服,但這個情緒暫時被擱置了。其實找回來後brew命令就可使用了,但仍是仍是出一樣的錯誤,就想是否是Homebrew在安裝時有問題,否則卸載後重裝好了,就運行了卸載命令,結果有文件沒卸乾淨,就手動卸載一個粗暴地把原來/usr/local中的文件全刪了,好傢伙,在我從新安裝homebrew的時候,就開始不停報錯了,出現git: libpcre2.dylib are not loaded,我這才發現,我好像把不應刪的刪除了,而後我在網上單獨下載了pcre2文件從新編譯安裝,而後又執行Homebrew Install,libpcre2.dylib好了,又顯示另一個依賴庫沒裝,周而復始。。。。。。我這才發現,無法補救了,如今Homebrew都安裝不了了,還安裝個屁的opencv啊。。。而後我又把主意打到OpenCV的源碼上,既然Homebrew安裝不了OpenCV,那我只好本身去編譯安裝好了,這裏我給一個地址 Mac下opencv的配置,有須要的同窗能夠參考着試試,裏面教了如何本身編譯安裝OpenCV,但由於我本身當時心情已經崩潰了,根本不想再找教程,就直接粗暴地重裝了系統(親們重裝系統記得備份文件哈),而後發現··········我去簡直一切順利呀。。。。。。。。。不過我不建議你們重裝系統,這是下下下下下下下下下下下下策(由於備份須要時間,而後你之前安裝的軟件,如今又要從新配置了,若是又遇到什麼問題了咩...........),並且我後面思考了一下,以爲仍是能夠有其它挽救的辦法的,我後面會說的,你們能夠參考着試試。git
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
卸載github
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
命令可能改變,最好參照官網進行操做,官網地址:https://brew.sh/index_zh-tw.htmlapi
brew install opencv
你會發現,當Homebrew和OS兼容後,這個步驟是多麼地順暢啊~~~~~~~不過這種命令(brew install + 目標包名)下載的都是最新版本的包,我當時下載的就是OpenCV4.0.1,若是你不想要OpenCV4怎麼辦?ruby
這時候咱們就要先了解brew的一些操做命令了 具體參考 Homebrew基本操做命令curl
裏面有個 brew search 命令, 該命令能幫你搜索你所須要的包的可下載版本post
brew search opencv
裏面有3個版本可以讓你下載,其中個人電腦上下載了OpenCV2和OpenCV3,它會自動在你下載好的版本後面☑️ui
知道了對應版本的包名,就可使用命令下載了搜索引擎
brew install opencv@3
同時,我在回顧裏提過的我當時想下載一個較低版本的pcre包,就去官網下載了個版本本身編譯,還識別不出來,其實根本就不用這麼麻煩啊,直接brew查找啊url
/usr/local/Cellar/opencv@3/3.4.5/include 和 /usr/local/Cellar/opencv@3/3.4.5/lib
配置好運行,出現錯誤❌
網上一查,發現一個解決方案:http://www.cnblogs.com/sparkmorry/p/3527624.html
趕忙試着解決一下,將編譯器換掉,結果出現新的錯誤❌
由於OpenCV的core文件依賴cstddef文件,因此只能使用LLVM C++ Standard Library with C++11 support這個編譯器,這個編譯器還無法改!!!!
那該怎麼辦??我想着既然原來的編譯器識別不了OpenCV的庫文件所在目錄吧,那就用其它的方法把OpenCV的動態庫連接進來。因而又在網上搜教程,找到一個解決方案:
在工程文件的配置文件找到TARGETS——Build Phases中找到 Link Binary With Libraries ,點擊➕號手動添加OpenCV的動態庫,結果發現,這個路徑搜索界面根本就到不了/usr/local的目錄,那要怎麼添加OpenCV的動態庫呢?往下看吧,有解決方案。
我先將/usr/local/Cellar/opencv@3/3.4.5旗下的文件製做替身(就是源文件的連接),並將替身移動到添加動態庫索引界面能夠到達的位置,而後就能夠憑上面的操做成功添加OpenCV的動態連接庫啦~~~~~下面是添加成功的截圖
四、運行程序
// // main.cpp // opencvTest // // Created by xxmeng on 2019/3/29. // Copyright © 2019 xxmeng. All rights reserved. // #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main(int argc, const char * argv[]) { // insert code here... Mat image; image = imread( "/Users/xxmeng/Projects/CplusProjects/opencvTest/baby.jpg", cv::IMREAD_ANYCOLOR); if(!image.data ) { printf( "No image data \n" ); return -1; } namedWindow( "Display Image", WINDOW_AUTOSIZE ); imshow( "Display Image", image ); waitKey(); //return return 0; }
OK......總算成功了,撒花慶祝🎉🎉🎉~~~~~~~以上,是我全部的經歷。。如有幫助到須要的人,我會很開心讓你們少走彎路哈哈