我收到此错误,我尝试将基于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开发的经验很少,所以我可能错过了一些非常简单的东西。
答案 0 :(得分:2)
您的静态库可能不是FAT(多个体系结构)库,也可能不包含 i386 代码。
找出答案的简单方法是从终端窗口尝试:
lipo -info libAruco.a
应该返回类似的内容:
Architectures in the fat file: libAruco.a are: i386 ...
其中...
可能armv7
(或更多)支持iOS设备。
OTOH如果缺少i386
则表示您的库未编译为在模拟器上工作。在这种情况下,您需要返回Xcode来构建此体系结构,并使用lipo
创建FAT库(包括arm
和i386
体系结构)。