使用 MacPorts 在 OSX 10.6 上安装 OpenCV

Posted

技术标签:

【中文标题】使用 MacPorts 在 OSX 10.6 上安装 OpenCV【英文标题】:Installing OpenCV on OSX 10.6 using MacPorts 【发布时间】:2010-09-14 11:27:06 【问题描述】:

我尝试按照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 上开发的新手,所以也许我遗漏了一些东西? 我想我可能需要设置一些路径变量,在阅读了我在谷歌搜索时发现的一些帖子后,我尝试设置 DYLD_LIBRARY_PATH=/opt/local/lib,但这是一个疯狂的猜测,它似乎没有帮助。我应该怎么做才能让编译器找到库?

谢谢!

【问题讨论】:

【参考方案1】:

在我发现有一个 pkg-config 集之前,我也无法让它工作很长一段时间。

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

g++ `pkg-config --libs --cflags opencv` -o helloWorld  helloWorld.cpp 

如果您使用的是 C 而不是 C++,则为 gcc。

希望对你有帮助!

【讨论】:

"pkg-config --libs --cflags opencv" 必须使用特殊的反引号进行转义,但 *** 会将它们解释为代码标签。【参考方案2】:

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

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


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

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

我推荐使用 -isystem ,因为它会禁用一些不修改代码就无法修复的警告。例如,如果您使用 -std=c++0x 等编译代码,则使用 std::auto_ptr。

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

【讨论】:

【参考方案3】:

引用自 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

【讨论】:

【参考方案4】:

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

#include &lt;highgui.h&gt; 不是 c++ 标头。

/opt/local/include 中使用#include&lt;opencv2/highgui/highgui.hpp&gt; 和它的朋友,并避免在/opt/local/include/opencv 中使用任何东西。

【讨论】:

以上是关于使用 MacPorts 在 OSX 10.6 上安装 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

使用 macports 安装 opencv 并在 qt (osx) 中使用

如何在 mac osx 10.6 中使用 fsevents 创建观察者

如何提交兼容 10.6 的 OSX 10.7 应用程序?

OSX 10.6 上的 Qt5

OSX 10.5 和 10.6 中的 MenuKey 功能?

如何在 Mac OSX 10.6 上卸载 wxpython 2.8