2013-04-18 141 views
12

我在Xcode中链接OpenCV时遇到问题。 我安装的OpenCV采用BREW:在Xcode中连接OpenCV时体系结构x86_64错误的未定义符号

brew tap homebrew/science 
sudo brew install opencv 

我开始了一个新的Xcode命令行项目,添加/usr/local/lib/usr/local/include到库和头搜索路径。 我还将pkg-config --libs opencv的输出添加到other linker options

但是,当我尝试编译这个小样本程序:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main(int argc, char *argv[]) 
{ 
    cv::Mat test; 
    cv::namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
    cv::waitKey(0);           // Wait for a keystroke in the window 
    return 0; 
} 

我得到下面的连接错误:

Undefined symbols for architecture x86_64: 
    "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: 
     _main in main.o 
ld: symbol(s) not found for architecture x86_64 

但是我能够编译使用

在命令行程序
g++ `pkg-config --cflags --libs opencv` prog.cpp 

所以我认为问题是Xcode的设置方式。但是我无法确定Xcode编译和我的命令行参数之间究竟有什么不同。

有没有人知道这个错误的原因或有一个想法,我可以尝试调查问题?

回答

27

在Xcode中创建一个新的组你的项目中,右键单击它,选择文件添加到项目,导航到/usr/local/lib文件夹并添加下列基本库:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

在以前的版本的OpenCV的库名称可能是:

libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib

(这些库可能位于另一个路径,具体取决于您用来安装的方法OpenCV的Mac上)

编辑:

如果你是包括动态库的链接阶段为OP解释上面的行不应该是必要的。

通过C++标准库选择项目,转到生成设置标签,过滤器,并设置此参数的libstdC++(GNU C++标准库)

+0

这将产生同样的错误。我的图书馆被命名稍有不同。 'libopencv_core.dylib'但我不认为这是一个问题。另外,它应该有什么区别我如何添加它们?使用“其他链接器选项”,我尝试尽可能地重新创建我的命令行版本。有没有一些方法来检查xcode是否实际使用这些库进行链接? – sietschie

+0

@sietschie看到我编辑的答案,我已经添加了另一个可能导致此问题的Xcode设置。 –

+3

使用'libstdC++'解决了我的问题。 – sietschie

8

我已经将生成设置 - > C++标准库设置为编译器默认值。错误消失了。

+0

谢谢,我只是遇到了这个问题。这为我解决了它! –

+0

libstdC++没有为我工作,但编译器默认没有 –

0

对于我来说,我使用OpenCV的在Xcode的iOS和我通过使用通过POD OpenCV的安装,而不是解决错误离线opencv框架。

您可以通过添加下面的吊舱OpenCV的文字试试看:

pod 'OpenCV', '2.4.9' 
相关问题