在Xcode中链接OpenCV时,架构x86_64的未定义符号错误

时间:2013-04-18 08:54:39

标签: xcode opencv

我在Xcode中链接OpenCV时遇到问题。 我使用brew安装了OpenCV:

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编译方式和命令行参数之间究竟有什么不同。

有谁知道这个错误的原因,或者知道我可以尝试调查这个问题?

4 个答案:

答案 0 :(得分: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

(这些库可能位于另一条路径中,具体取决于您在Mac上安装OpenCV的方法。)

编辑:

如果您在链接阶段包含动态库,则OP不需要上述行。

选择项目,转到构建设置标签,按 c ++标准库过滤,然后将此参数设置为 libstdc ++(GNU C ++标准库)< /强>

答案 1 :(得分:7)

我已设置构建设置 - &gt; c ++标准库到编译器默认。错误消失了。

答案 2 :(得分:1)

我必须添加以下库(构建阶段 - &gt;链接二进制文件库),以便OpenCV构建:

  • 加速
  • AssetsLibrary
  • AVFoundation
  • CoreGraphics中
  • CoreImage
  • CoreMedia
  • corevideo的
  • QuartzCore
  • 的UIKit
  • 粉底

参考:http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html#opencviosvideoprocessing

答案 3 :(得分:0)

对我来说,我在iOS的xcode中使用opencv,我使用opencv通过pod安装而不是离线opencv框架来解决错误。

您可以尝试添加以下opencv pod文本:

pod 'OpenCV', '2.4.9'