0

私は OpenCV を使い始めたばかりで、いくつかの基本的なサンプル プログラムを実行していると、リンク エラーが発生しました。すべてが適切にリンクされているコア ライブラリ libopencv_core.2.4.3.dylib の一部である必要があります (Mat オブジェクトには問題はなく、operations.hpp のフォーマッタ クラスだけです)。

さらに、次の行の場合: cout << format(M,"C") << endl; が除外されている場合、コードは正常にコンパイルされますが、奇妙な動作があります。M Mat-object が cout に送信されると、コードが最後まで実行されても、オブジェクトに含まれる値は出力されず、その後の cout の呼び出しでは何も生成されません。

他の誰かがこの問題を抱えていますか?

macports の openCV 2.4.3、xcode 4.5.2、os x Lion 10.7.5

コード: (事実上、openCV サンプル コードからの cout_mat.cpp のスニペット)

    #include "/usr/local/include/opencv2/opencv.hpp"
    #include "/usr/local/include/opencv2/core/operations.hpp"
    #include <iostream>


    using namespace cv;
    using namespace std;


int main(int,char**)
{

    Mat M = Mat::eye(4, 4, CV_64F);
    M.at<double>(0,0) = CV_PI;

    // print out val at 0,0
    cout << "M(0,0) = " << M.at<double>(0,0) << endl;

    // test serial out capabilities of cv::Mat (yields no output beyond M=)
    cout << "M = " << endl << M << endl;
    // try to print M(0,0) to screen again to demonstrate that cout no longer prints to screen
    cout << "M(0,0) = " << M.at<double>(0,0) << endl;
    // Try to format the output with 'c-style',  Note: if included in program this line yields linker error
    cout << format(M,"C") << endl;


    return 0;
}

デバッガーでの出力: 行 "cout << format(M,"C") << endl;" コメントアウト

M(0,0) = 3.14159
M = 

M= は、追加の cout とともに空です: M(0,0) = 3.14159

行「cout << format(M,"C") << endl;」のエラー 含まれるもの:

Undefined symbols for architecture x86_64:
  "cv::Formatted::Formatted(cv::Mat const&, cv::Formatter const*, std::__1::vector<int, std::__1::allocator<int> > const&)", referenced from:
      __ZN2cvL6formatERKNS_3MatEPKcRKNSt3__16vectorIiNS5_9allocatorIiEEEE in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
4

1 に答える 1

0

tomriddle_1234の提案により、両方の問題が修正されました。

[プロジェクト]->[ビルド設定]->[ビルドオプション]->[c++ / Objective-c / c用コンパイラ]で、AppleLLVM4.1の代わりにLLVMgcc4.2を選択します。

これで、coutはすべてのエントリを適切に表示し、フォーマット関数はリンカーエラーを発生させることなく同様に機能します。

于 2012-12-18T05:31:18.173 に答える