我按照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,但这是疯狂的猜测,它似乎没有帮助。我该怎么做才能让编译器找到库?
谢谢!
答案 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
中的任何内容。