【问题标题】:How to resolve iOS Link errors with OpenCV如何使用 OpenCV 解决 iOS 链接错误
【发布时间】:2013-01-06 19:10:23
【问题描述】:

我正在尝试将最新版本的 openCV 添加到我的 iOS 项目中,但是当我编译时,我收到大约 30 个链接错误:

例子:

Undefined symbols for architecture i386:
"cv::merge(std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::_OutputArray const&)", referenced from:

我在一个带有简单视频捕获的虚拟应用程序中添加了 OpenCV 框架 along with all the other required frameworks(按照链接中的教程进行操作),它运行良好。

我不知道为什么它可以在一个地方运行得如此顺利,但在另一个地方却不行。我唯一的想法是我正在为两个应用程序之间的不同架构进行编译,但我认为我的目标是 armv7 和 armv7s。

知道什么可能导致链接错误吗?

【问题讨论】:

  • 您的问题不清楚 - 首先您说您遇到链接错误,然后您继续说该框架有效。您是否在每种情况下都使用相同版本的框架,并且您的项目都是新项目?
  • 有两个项目:一个是我一起完成的简单测试,另一个是我的完整应用程序。它在测试项目中有效,但是当我按照相同的步骤操作时,会出现链接错误。我认为每种架构都支持不同的架构,但我不知道哪个/如何/等等。

标签: ios opencv linker


【解决方案1】:

检查这个:(假设您使用的是 LLVM 编译器)

目标 > 构建设置 > Apple LLVM 编译器 4.1 - 语言 > C++ 标准库
尝试选择

libstdc++ (GNU C++ standard library)`  

然后尝试切换到

libc++ (LLVM C++ standard library with C++11 support)

libstdc++ 似乎适用于较旧的 openCV 版本,libc++ 适用于较新的版本。如果您设置错误(无论哪种方式),您都会看到这些类型的错误。

如果这不是原因,请在每个项目中并排打开构建设置并检查 每个 设置...

我最近一直在努力解决这个问题 - 请参阅我的问题 here、答案 here 和 github 示例 here。 github项目包括几天前从当前源编译的opencv框架。现在,如果在 10.6/XCode4.2 或 10.7/XCode4.4+ 下编译,我正在整理一个多目标示例,该示例链接到不同版本的框架。 [在github上here]

更新

按照@mikewoz 的要求,您可能需要使用libstdc++ 运行当前的openCV,以保持与其他框架的兼容性。可以创建具有libstdc++ 兼容性的当前版本。有关详细信息,请参阅我对 Mike 问题的回答:

OpenCV 2.4.3+ with libstdc++ for iOS?

【讨论】:

  • 非常感谢!你一定让我度过了一个下午!它被设置为“编译器默认值”,所以我将其更改为“libc++(支持 C++11 的 LLVM C++ 标准库)”并且它工作正常!
  • 同意,对于当前的 openCV 2.4.4,libc++ 是正确的选择,它不是默认的。
  • 如果我们需要使用 libstdc++ 因为项目中还有其他 3rd 方库怎么办?有没有一种方法可以在没有 libc++/C++11 支持的情况下构建最新的 OpenCV?并退回到 libstdc++?
  • @mikewoz - 我没试过,但在ios/cmake/Modules/Platform/iOS.cmake 中,您可以在“set (CMAKE_CXX_FLAGS "”中将libc++ 更改为libstdc++。如果你有运气,也许你可以在这里添加评论。
  • 为我工作。根据您的指定,从默认编译器切换到具有 C++11 支持的 LLVM C++ 标准。非常感谢!
猜你喜欢
  • 2010-11-01
  • 2011-05-25
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2015-07-21
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多