Я только начал с OpenCV и проходил некоторые базовые примеры программ, когда получил ошибку компоновки. Все должно быть частью базовой библиотеки libopencv_core.2.4.3.dylib, которая надлежащим образом связана (без проблем с объектами Mat, только класс formatter из operations.hpp).
Кроме того, если строка: cout << Формат (М, «С») << епсИ; исключается, тогда код компилируется нормально, но есть странное поведение. Как только M Mat-объект отправляется в cout, значения, содержащиеся в объекте, не печатаются, и последующие вызовы cout ничего не дают, даже если код выполняется до завершения.
У кого-нибудь еще была эта проблема?
openCV 2.4.3 от macports, xcode 4.5.2, os x Lion 10.7.5
Код: (фактически фрагмент файла cout_mat.cpp из примера кода openCV)
#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» << Формат (М, «С») << endl; «закомментировано
M(0,0) = 3.14159
M =
M = пусто вместе с дополнительной меткой для: M (0,0) = 3,14159
ошибка в строке «cout << Формат (М, «С») << 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)
Предложение tomriddle_1234 устранило обе мои проблемы.
Под Проектом -> Настройки сборки -> Параметры сборки -> Компилятор для c ++ / target-c / c: выберите LLVM gcc 4.2 вместо Apple LLVM 4.1.
Теперь cout соответствующим образом отображает все записи, и функция форматирования также работает без ошибок компоновщика.
Других решений пока нет …