如何使用OpenCV解决iOS链接错误

时间:2013-01-06 19:10:24

标签: ios opencv linker

我正在尝试将最新版本的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。

有什么可能导致链接错误的想法吗?

1 个答案:

答案 0 :(得分:13)

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

目标&gt;构建设置&gt; Apple LLVM编译器4.1 - 语言&gt; 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?