2017-04-08 143 views
1

我試圖使用的OpenCV的chamferMatching功能在OSX工作,但得到一個錯誤約在釋放未被分配的對象一個失敗的嘗試(據我可以告訴):如何讓chamerMatching在OSX上工作?

fs(58697,0x100b3c000) malloc: *** error for object 0x103800000: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 

我發現一些有用的帖子是這樣二:

  1. chamerMatching malloc error
  2. debug assertion failed vc\include\vector vector iterator + offset out of range in chamferMatching Opencv

在Ubuntu上,S意味着從源代碼編譯OpenCV 2.4.1並使用它做了伎倆。

雖然在OSX上同樣沒有工作。我也註釋掉模板刪除在Matching析:

~Matching() 
     { 
      for (size_t i = 0; i<templates.size(); i++) { 
       // delete templates[i]; 
      } 
     } 

,但沒有喜悅。

我甚至嘗試過註釋chamfermatching.cpp中的所有刪除語句,但我仍然得到相同的錯誤。

更新我試圖重新編譯的OpenCV 2.4.1與3個不同版本的G ++:4.9,5和6,但我發現鏈接錯誤。這裏有一個例子使用g ++編譯5:

g++-5 ../fs.cpp -I/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/include/opencv -I/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/include -L/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_videostab -o fs 
Undefined symbols for architecture x86_64: 
    "cv::chamerMatching(cv::Mat&, cv::Mat&, std::vector<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >, std::allocator<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > > > >&, std::vector<float, std::allocator<float> >&, double, int, double, int, int, int, double, double, double, double)", referenced from: 
     _main in ccTJvcHd.o 
    "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::analyzeValue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::CommandLineParser::has(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::CommandLineParser::getString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from: 
     _main in ccTJvcHd.o 
    "cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from: 
     _main in ccTJvcHd.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

我已經嘗試添加標誌像-std=c++11然後-std=c++0x,但沒有喜悅。

有關如何解決此問題的任何提示?

回答

0

雖然hacky,OSX上的一個選項(即使是使用OpenCV 2.4.13):刪除編譯後的.dylib並將未編譯的contrib模塊添加到項目中。

對於OpenCV 2.4.1,它只是一個註釋掉刪除語句的問題。 對於OpenCV 2.4.13,我還不得不註釋掉兩個cvconfig.h包含。