MacOS下在Xcode里搭建OpenCV开发环境

  T____T~~~~~~~~~~ 仅记录我在Xcode里搭建OpenCV踩过的坑,这个过程特别曲折,本人从19/3/25到19/3/29足足花了五天才配置好这个环境orz。。。中间经历过无数次找死的操作,且听我慢慢讲来。

 回顾:

  本人开始搭建环境时使用的是 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,但因为我自己当时心情已经崩溃了,根本不想再找教程,就直接粗暴地重装了系统(亲们重装系统记得备份文件哈),然后发现··········我去简直一切顺利呀。。。。。。。。。不过我不建议大家重装系统,这是下下下下下下下下下下下下策(因为备份需要时间,然后你以前安装的软件,现在又要重新配置了,如果又遇到什么问题了咩...........),而且我后面思考了一下,觉得还是可以有其它挽救的办法的,我后面会说的,大家可以参考着试试。

 额。。。。。。我发现好像不对哎,pcre只有一个,pcre2不知道是不是pcre的升级,但是安装opencv依赖的是pcre包而不是pcre2。。。不管啦,跳过。。。
 
这个时候,你所需要的OpenCV指定版本就装好啦,可用 brew info 命令进行查看
 
 
3、在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的动态链接库啦~~~~~下面是添加成功的截图

 

 

 4、运行程序

//
//  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......总算成功了,撒花庆祝🎉🎉🎉~~~~~~~以上,是我所有的经历。。若有帮助到需要的人,我会很开心让大家少走弯路哈哈

posted @ 2019-03-31 01:41  thePacer  阅读(550)  评论(1编辑  收藏  举报