2017-04-08 2 views
1

나는 OSX에서 작업을 OpenCV의 chamferMatching 기능을 사용하려고하지만 (지금까지 내가 말할 수있는) 할당되지 않은 객체를 자유롭게에서 실패한 시도에 대한 오류 받고 있어요 :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

,의 소스에서 OpenCV 2.4.1을 컴파일하고이를 사용하여 트릭을 만들었습니다.

그래도 OSX에서는 작동하지 않습니다. 나는 또한 Matching 소멸자 템플릿 삭제를 주석 :

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

하지만 기쁨을.

나는 심지어 chamfermatching.cpp의 모든 delete 문을 주석 처리하려고 시도했지만 여전히 동일한 오류가 발생합니다.

업데이트 OpenCV 2.4.1을 3 가지 다른 버전의 g ++ : 4.9, 5 및 6으로 다시 컴파일하려고했지만 연결 오류가 발생합니다.

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 같은 플래그를 추가하려고했습니다,하지만 기쁨 : 다음은 g ++ 5 컴파일 예입니다.

이 문제를 어떻게 극복 할 수있는 방법을 알려주십시오.

답변

0

해커이긴하지만, OpenCV 2.4.13에서도 OSX에서 컴파일 된 .dylib를 제거하고 컴파일되지 않은 contrib 모듈을 프로젝트에 추가하는 옵션이있었습니다.

OpenCV 2.4.1의 경우 삭제 명령문을 주석 처리해야했습니다. OpenCV 2.4.13의 경우 두 개의 cvconfig.h에 주석을 추가해야했습니다.