【问题标题】:Error when using imshow on OS X在 OS X 上使用 imshow 时出错
【发布时间】:2013-10-07 19:19:37
【问题描述】:

我在 XCode 中设置了 OpenCV2,但不幸的是 imshow 不起作用:

Undefined symbols for architecture x86_64:
  "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我正在使用最新的 XCode 运行 OS X 10.8.4。

我在下面附上了几张图片来展示 XCode 和库中的设置。 到目前为止,除了这个,其他功能似乎都可以在 OpenCV 上正常工作。

【问题讨论】:

标签: c++ xcode macos opencv llvm


【解决方案1】:

我要冒昧地说你用libstdc++ 编译了OpenCV2,现在正在用libc++ 支持编译你的应用程序。

你需要用相同的C++库编译OpenCV2,否则无法链接。

如果你对 OpenCV2 库做了一个nm,如果它是用libstdc++ 编译的,它会看起来像:

cv::imshow(std::string const&, cv::_InputArray const&)

如果它是用libc++ 编译的,它看起来像:

cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)

要获得去错符号,请执行以下操作:

nm library | c++filt | grep cv::imshow

【讨论】:

  • 不幸的是,我认为你是对的。这将杀死我对std::vector 的初始化,这很不幸.. No matching constructor for initialization of 'std::vector&lt;Point32&gt;'
  • 不幸的是,您必须使用相同的 c++ 标准库编译所有内容,否则在运行时可能会出现精神错乱。命名空间已被修改以防止您不小心这样做(注意 libc++ 编译选项中的::__1::)。
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2013-05-05
  • 2016-07-22
相关资源
最近更新 更多