1

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)

これは、簡単に100を超えるため、この問題が発生しているopencvメソッドの完全なリストのサンプルにすぎません。

私はこれをシミュレーターで実行しようとしています(私はmonotouchの試用版しか持っていません)。私はxcodeでipadシミュレーター用にコンパイルしており、Opencvチュートリアルに従って、Webサイトから事前に構築されたフレームワークを使用してプロジェクトをセットアップしています。静的ライブラリは、いくつかのopencvモジュールとリンクする必要があるという事実を考慮して期待するほど大きくないため、入力する必要のあるリンカーフラグがあるかどうか疑問に思っていました(これは単なる直感であり、必然的に何かを示します)。

私はiOSとMonoTouchの開発の経験がほとんどないので、本当に単純なものを見逃していた可能性があることを言及することも重要だと思います。

4

1 に答える 1

2

スタティック ライブラリが FAT (複数アーキテクチャ) ライブラリではないか、i386コードが含まれていない可能性があります。

確認する簡単な方法は、ターミナル ウィンドウから試してみることです。

lipo -info libAruco.a

それは次のようなものを返すはずです:

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

どこで(またはそれ以上) iOS デバイスをサポートする...可能性があります。armv7

OTOHi386が欠落している場合、ライブラリがシミュレーターで動作するようにコンパイルされていないことを意味します。このような場合、Xcode に戻ってこのアーキテクチャを構築lipoし、FAT ライブラリ ( と の両方のアーキテクチャを含む) を作成するためにarm使用する必要がありますi386

于 2013-02-14T13:33:45.583 に答える