2014-01-22 4 views
0

Недавно работал с некоторыми OpenCV, однако у меня возникла интересная проблема. У меня есть простой класс для хранения данных и чтения и записи данных в файл.OpenCV undefined reference (FileStorage с вектором <KeyPoint>)

Вот функция записи:

cv::Mat descriptors; 
vector<cv::KeyPoint> keypoints; 

void EventType::write(cv::FileStorage outfile) { 
    outfile << "descriptorId" << descriptors; 
    outfile << "keypointId" << keypoints; 
} 

от выпуска arrises в то время как связывающие:

EventType.cpp.o: In function cv::FileStorage& cv::operator<< <std::vector<cv::KeyPoint, 
    std::allocator<cv::KeyPoint> > >(cv::FileStorage&, std::vector<cv::KeyPoint, 
    std::allocator<cv::KeyPoint> > const&)': 
EventType.cpp:(.text+0xc99): undefined reference to `cv::write(cv::FileStorage&, 
    std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, 
    std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> > const&)' 

Однако также при связывании он предлагает следующие альтернативы:

/opencv2/core/operations.hpp:2707: note: candidates are: void cv::write(cv::FileStorage&, const std::string&, int) 
/opencv2/core/operations.hpp:2708: note:     void cv::write(cv::FileStorage&, const std::string&, float) 
/opencv2/core/operations.hpp:2709: note:     void cv::write(cv::FileStorage&, const std::string&, double) 
/opencv2/core/operations.hpp:2710: note:     void cv::write(cv::FileStorage&, const std::string&, const std::string&) 
/opencv2/core/operations.hpp:2787: note:     void cv::write(cv::FileStorage&, const cv::Range&) 
/opencv2/core/operations.hpp:2856: note:     void cv::write(cv::FileStorage&, const std::string&, const cv::Range&) 
/opencv2/core/operations.hpp:2902: note:     void cv::write(cv::FileStorage&, const std::string&, const cv::Mat&) 
/opencv2/core/operations.hpp:2903: note:     void cv::write(cv::FileStorage&, const std::string&, const cv::SparseMat&) 
/opencv2/features2d/features2d.hpp:112: note:     void cv::write(cv::FileStorage&, const std::string&, const std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&) 

Это, как представляется, что прототип в /opencv2/features2d/features2d.hpp - идеальное совпадение. Какие-либо предложения?

ответ

-1

Проблема была в моем файле FindOpenCV.cmake. Библиотека features2d не была связана.

1

Если компоновщик говорит «неопределенная ссылка на», этап компиляции уже выполнен, что означает, что компилятор принял вашу функцию как действительную.

Попробуйте связать все библиотеки opencv и посмотреть, изменит ли это результат. Также проверьте, что используемые вами заголовки имеют ту же версию, что и библиотека, к которой вы хотите подключиться.

+0

Спасибо, это помогло мне отследить проблему. :) – Kazz