1

Features2DOpenCV で使用するとビルド エラーが発生し、理由がわかりません。

  • OpenCV バージョン: 2.4.3 (MacPorts)
  • コンパイル アーキテクチャ: 64 ビット インテル
  • C 言語の方言: GNU99
  • C++ 言語の方言: GNU++11
  • C++ 標準ライブラリ: libstdc++

ビルド エラー:

Undefined symbols for architecture x86_64:
"cv::FeatureDetector::detect(cv::Mat const&, std::__debug::vector<cv::KeyPoint,     std::allocator<cv::KeyPoint> >&, cv::Mat const&) const", referenced from:
  analysis::openCvStitching() in analysis.o
"cv::DescriptorMatcher::match(cv::Mat const&, cv::Mat const&, std::__debug::vector<cv::DMatch, std::allocator<cv::DMatch> >&, cv::Mat const&) const", referenced from:
  analysis::openCvStitching() in analysis.o
"cv::DescriptorExtractor::compute(cv::Mat const&, std::__debug::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, cv::Mat&) const", referenced from:
  analysis::openCvStitching() in analysis.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

これは、FeatureDetector と DescriptorExtractor へのポインターを作成する方法です。

Ptr<FeatureDetector> surfDetector = FeatureDetector::create(type);
Ptr<DescriptorExtractor> surfExtractor = DescriptorExtractor::create(type);
4

1 に答える 1

3

プロジェクト設定のプリプロセッサフ​​ラグを削除したり、プリプロセッサフ​​ラグから削除_GLIBCXX_DEBUG=1したりしましたか?_GLIBCXX_DEBUG_PEDANTIC=1opencv2 c ++ apiは、API関数でのSTLテンプレートの使用がやや悪いため、標準ライブラリまたはコンパイラフラグのバージョンがコンパイル時に使用されたものと正確に一致しない場合、リンカーエラーまたはクラッシュが発生する可能性があります。

于 2012-12-18T13:05:27.970 に答える