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



我收到了这个错误,我试图将基于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 ...

其中CCD_ 1可能是支持iOS设备的CCD_ 2(或更多)。

OTOH如果i386丢失,则意味着您的库没有编译为在模拟器上工作。在这种情况下,您需要返回Xcode来构建此体系结构,并使用lipo创建FAT库(其中包括armi386体系结构)。

相关内容

  • 没有找到相关文章

最新更新