ios - 将 OpenCV 与 MonoTouch 链接返回 "Undefined symbols for architecture i386"错误

标签 ios opencv linker xamarin.ios ios-simulator

我在尝试将基于 OpenCV 的库添加到 MonoTouch 项目时遇到此错误:

Undefined symbols for architecture i386:
      "cv::isContourConvex(cv::_InputArray const&)", referenced from:
  aruco::MarkerDetector::detectRectangles(cv::Mat const&, std::vector<aruco::MarkerDetector::MarkerCandidate, std::allocator<aruco::MarkerDetector::MarkerCandidate> >&)in libAruco.a(markerdetector.o)
      "cv::warpPerspective(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::Size_<int>, int, int, cv::Scalar_<double> const&)", referenced from:
  aruco::MarkerDetector::warp_cylinder(cv::Mat&, cv::Mat&, cv::Size_<int>, aruco::MarkerDetector::MarkerCandidate&)in libAruco.a(markerdetector.o)
  aruco::MarkerDetector::warp(cv::Mat&, cv::Mat&, cv::Size_<int>, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >)in libAruco.a(markerdetector.o)
      "cv::FileNodeIterator::readRaw(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*, unsigned long)", referenced from:
  cv::VecReaderProxy<float, 1>::operator()(std::vector<float, std::allocator<float> >&, unsigned long) constin libAruco.a(board.o)
      "cv::FileNodeIterator::FileNodeIterator(CvFileStorage const*, CvFileNode const*, unsigned long)", referenced from:
  cv::FileNode::begin() constin libAruco.a(board.o)
  cv::FileNode::end() constin libAruco.a(board.o)

这只是存在此问题的 opencv 方法的完整列表中的一个示例,因为它很容易超过 100 个。

我正在尝试在模拟器中运行它(我只有 monotouch 的试用版)。我正在 xcode 中为 ipad 模拟器进行编译,并按照 Opencv 教程使用他们网站上的预构建框架设置我的项目。我可能想知道是否需要输入一些链接器标志,因为我的静态库没有我期望的那么大,因为它需要与几个 opencv 模块链接(这只是一种直觉,而不是必然指示任何东西)。

我认为我在 iOS 和 MonoTouch 开发方面的经验很少,所以我可能会错过一些非常简单的事情。

最佳答案

您的静态库可能不是 FAT(多体系结构)库或可能不包含 i386 代码。

找出答案的简单方法是从终端窗口尝试:

lipo -info libAruco.a

那应该返回类似的东西:

Architectures in the fat file: libAruco.a are: i386 ...

... 可能是 armv7(或更多)以支持 iOS 设备。

OTOH 如果缺少 i386 那么这意味着您的库未编译为在模拟器上工作。在这种情况下,您需要返回 Xcode 来构建此架构并使用 lipo 创建 FAT 库(包括 armi386架构)。

关于ios - 将 OpenCV 与 MonoTouch 链接返回 "Undefined symbols for architecture i386"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868472/

相关文章:

ios - 'UIImage' 没有名为 'element' 的成员

图像处理如何检测图像中的特定自定义形状

python - Opencv - 灰度模式与灰度颜色转换

ios - UIPageViewController 与不同的 ViewControllers,正确的方式?

ios - 属性字符串仅更改字体大小,不更改字体名称

ios - 如何保留可变号码?

c++ - 获取垫子类型

c - 全局空间中的指针初始化 C 语句如何在编译/链接时获取其分配的值?

c++ - undefined symbol std::__throw_bad_function_call

c++ - 避免上课不见面? C++