私は 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)