MacOS下在Xcode裏搭建OpenCV開發環境

  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

 額。。。。。。我發現好像不對哎,pcre只有一個,pcre2不知道是否是pcre的升級,可是安裝opencv依賴的是pcre包而不是pcre2。。。無論啦,跳過。。。
 
這個時候,你所須要的OpenCV指定版本就裝好啦,可用 brew info 命令進行查看
 
 
三、在Xcode裏配置OpenCV
找到工程文件的配置文件,在TARGETS——Build Settings中搜索Search Paths,在Header Search Paths中填入OpenCV3的頭文件的所在路徑,在Library Search Paths中填入OpenCV3的動態連接庫的所在路徑,個人是
/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......總算成功了,撒花慶祝🎉🎉🎉~~~~~~~以上,是我全部的經歷。。如有幫助到須要的人,我會很開心讓你們少走彎路哈哈

相關文章
相關標籤/搜索