使用 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 <highgui.h>
不是 c++ 标头。
在/opt/local/include
中使用#include<opencv2/highgui/highgui.hpp>
和它的朋友,并避免在/opt/local/include/opencv
中使用任何东西。
【讨论】:
以上是关于使用 MacPorts 在 OSX 10.6 上安装 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章
使用 macports 安装 opencv 并在 qt (osx) 中使用
如何在 mac osx 10.6 中使用 fsevents 创建观察者