1

Mac OSX 10.8、XCode 4.6、C ++

私は自分のシステムopencv_tutorials.pdfにあるのチュートリアルに従って/opt/local/share/OpenCV/docいます。311ページで、次のサンプルを取得します(少し編集)。

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv; 
int main( int argc, char** argv ) {
  Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
  int minHessian = 400;
  SurfFeatureDetector detector( minHessian );
  std::vector<KeyPoint> keypoints_1;
  detector.detect( img_1, keypoints_1 );
}

上記のコードを#include "opencv2/nonFree/features2d.hpp"、実行して見つけたファイルに変更する必要がありました

find /opt/local/include -name "*.hpp" -exec grep SurfFeatureDetector "{}" ';' -print

コードはコンパイルされます。つまり、シンボルdetector.detecthppファイル内にあり、C++コンパイラによる型チェックに合格します。次に、シンボルを含むライブラリを見つけようとします。

今、私はこれらのライブラリを私のディストリビューションに持っています/opt/local/lib

libopencv_calib3d.2.4.3.dylib
libopencv_contrib.2.4.3.dylib
libopencv_core.2.4.3.dylib
libopencv_features2d.2.4.3.dylib
libopencv_flann.2.4.3.dylib
libopencv_gpu.2.4.3.dylib
libopencv_highgui.2.4.3.dylib
libopencv_imgproc.2.4.3.dylib
libopencv_legacy.2.4.3.dylib
libopencv_ml.2.4.3.dylib
libopencv_nonfree.2.4.3.dylib
libopencv_objdetect.2.4.3.dylib
libopencv_photo.2.4.3.dylib
libopencv_stitching.2.4.3.dylib
libopencv_ts.2.4.3.dylib
libopencv_video.2.4.3.dylib
libopencv_videostab.2.4.3.dylib

nm名前マングリングは頭の中で逆コンパイルするのが難しいので、必要な記号をこれらで検索するのは有益ではないことがわかりました。すべてのライブラリをブルートフォースで含めましたが、それでもリンカーエラーが発生します。

Undefined symbols for architecture x86_64:
  "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      _main in main.o
  "cv::FeatureDetector::detect(cv::Mat const&, std::__1::vector<cv::KeyPoint, std::__1::allocator<cv::KeyPoint> >&, cv::Mat const&) const", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64

ここから始めて、OpenCvリファレンスドキュメントとwikiページのスポットチェックを行いました。

http://opencv.willowgarage.com/documentation/cpp/features2d__feature_detection_and_descriptor_extraction.html

しかし、成功しませんでした。

ありがたいです

  1. これらのOpenCvAPIを見つけるための具体的なヘルプ
  2. この種のクエリの一般的な戦略:「リンクする必要のあるシンボルがどのライブラリに含まれているか」。この種の問題は私にC++を嫌いにさせます。なぜなら、5分間のコーディングは常に何時間ものライブラリ検索につながるように思われるからです。おそらく、これを行うための専門的な秘密がわからないためです。
4

3 に答える 3

8

LinuxでOpenCV3.0.0opencv_imgcodecsを使用している場合、共有ライブラリにリンクする必要がありました。

于 2015-03-21T16:23:59.707 に答える
2

私のツールチェーンは、CMakeを利用してこれらの種類のものを追跡します。私が使用するほとんどの新しいライブラリには、通常、他の人が書いたFind*.cmakeファイルに付随するグーグル検索があります。私の特定の設定についてさらに情報が必要な場合は、お気軽にお問い合わせください。この特定の問題(アーキテクチャx86_64の未定義のシンボル)は、フリーでないライブラリにあるもので数回見ました。ただし、未読に対してなぜそのエラーが発生するのかはわかりません。私が最初に見る場所は、samples/cppフォルダーのmatcher_simple.cppの例です。これ(これを使用して)と他の例をコンパイルして実行できる場合、セットアップは問題ないはずです。できない場合は、その例のエラーを投稿していただけますか?私はXCodeに精通していませんが、他の誰か[ビルド設定]>[ビルドオプション]>[C/ C ++ / Objective-C用コンパイラ]に移動し、AppleLLVMコンパイラからLLVMGCC4.2に変更することをお勧めします。そして、ここにもいくつかの他の推測があります。

于 2013-02-18T17:29:43.387 に答える
0

ビルド設定のその他のリンカーフラグのリストに、を含めてみてください-lopencv_features2d-lopencv_nonfree私は同じ問題を抱えていました、そしてそれは私のために働きました

于 2013-12-17T03:37:40.387 に答える