使用MacPorts在OSX 10.6上安装OpenCV

时间:2010-09-14 11:27:06

标签: c++ macos g++ opencv

我按照http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port上安装MacPorts的说明尝试安装OpenCV,输入

sudo port install opencv

在终端。

安装/编译似乎没问题,文件在/ opt / local子目录中应该是这样。作为第一个测试,我尝试在一个C ++源文件中包含highgui.h:

#include <highgui.h>

但是当用g ++或gcc编译时,我得到error: highgui.h: No such file or directory。我刚开始在Mac上开发,所以也许我错过了一些东西? 我想我可能要设置一些路径变量,在阅读了一些我在google搜索时发现的帖子后,我尝试设置DYLD_LIBRARY_PATH = / opt / local / lib,但这是疯狂的猜测,它似乎没有帮助。我该怎么做才能让编译器找到库?

谢谢!

4 个答案:

答案 0 :(得分:3)

直到我发现有一个pkg-config设置,我才能让它工作很长一段时间。

所有你需要做的就是没有问题的编译是这样的:

g++ `pkg-config --libs --cflags opencv` -o helloWorld  helloWorld.cpp 
如果您使用的是C而不是C ++,请使用

或gcc。

我希望有所帮助!

答案 1 :(得分:2)

MacPorts在/ opt / local / include目录中安装C / C ++标头,这不是系统默认设置。这意味着您必须明确告诉GCC在哪里查找您正在使用的标头。您可以通过指定“-isystem”或“-I”命令行选项来执行此操作:

  

-isystem dir              在指定所有目录之后,在头文件中搜索dir   通过-I但在标准系统之前   目录。将其标记为系统              目录,以便它得到同样的特殊待遇   适用于标准系统   目录。如果dir以“=”开头,   然后              “=”将被sysroot前缀替换;看--sysroot和   -isysroot。


  

-Idir              将目录dir添加到目录列表的头部   搜索头文件。这个   可用于覆盖系统              头文件,替换您自己的版本,因为这些   在之前搜索目录   系统头文件目录。   然而,              您不应该使用此选项添加包含的目录   供应商提供的系统头文件   (使用--isystem)。如果你              使用多个-I选项,扫描目录   从左到右的顺序;标准   系统目录来了。

     

如果标准系统包含目录或目录   用-isystem指定,也是   用-I指定,-I选项将   是              忽略。该目录仍将被搜索,但作为一个系统   目录在其正常位置   系统包括链。这是              确保GCC修复错误系统头的程序   以及include_next的排序   指令不是无意中的              改变。如果您确实需要更改搜索顺序   系统目录,使用-nostdinc   和/或 - 系统选项。

我建议使用-isystem,因为它会禁用一些在不修改代码的情况下无法修复的警告。例如,如果使用-std = c ++ 0x etcetera编译代码,则使用std :: auto_ptr。

图书馆也是如此。您必须告诉GCC使用-L选项在哪里找到它们。

答案 2 :(得分:1)

从OpenCV wiki页面引用: http://opencv.willowgarage.com/wiki/CompileOpenCVUsingMacOSX

设置环境变量如下:

export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/local/lib

并编译这样的opencv代码:

g++ -bind_at_load `pkg-config --cflags opencv` morphology.c -o morphology `pkg-config --libs opencv`

然后像这样运行代码:

./morphology

答案 3 :(得分:0)

Macports安装对我来说工作顺利,在安装opencv之前安装tbb是值得的,大规模的加速(遗憾的是它不会反过来)。

#include <highgui.h>不是c ++标头。

#include<opencv2/highgui/highgui.hpp>中使用/opt/local/include及其朋友,避免/opt/local/include/opencv中的任何内容。