Opencv 3.4 이후 문제점. (제공 버전과 Source Build를 통해 Test를 진행하였다. 4.1.2, 3.8.4, 3.4.0 )
- Memory Leak이 있다.(단지 링크 순서에 의한 것이라지만-Debug상)
OpneCV 진영의 먹칠(??)이다 ㅡ.ㅡ;
조치 1) Static MFC DLL로 조치 --> cv::Mat을 사용할 때 __acrt_first_block == header heap Error 발생.(debug에서만 발생.) (사용 불가.) --> Local Project는 Debug이지만 Dll은 신뢰 하영 Release로 Link시 사용하는 Opencv C++ Class Link error 발생. (사용 불가.)
조치 2) 모두 동적 Link로 Build 지연된 DLL로 변경. 프로그램 시작(동작 없이) 종료 시 Leak 없음. -->cv::Mat Class 함수 호출 IplImage 사용호 종료 시 Memory Leak 발생.
결론 현재 VS2017로 컴파일하는 3.2 버전 이상에서는 => Memory Leak을 조치하면, __acrt_first_block == header 발생으로 C++Mat를 사용할 수 없다. => 다중 스레드 디버그(/MTd and /MT)에서 그나마 유연하게 동작한다. (__acrt_first_block == header를 발생시키는 코드도 있다.) => 3.2 이상 버전으로 갈수록 C++형태의 코드와 더 많은 STL사용으로 컴파일 강도가 높아지고 있는 듯하다.
다른 분들은 어떠실지 모르지만 현재 3.2 버전 이후에는 Memory Leak, Heap에러의 조치가 없다면, 버전업을 할 수 없을 듯하다. - 가짜 Memory Leak은 Main S/W Debugging을 힘들게 한다. - Heap에러는 S/W 신뢰도를 떨어뜨린다.
5) button Generate 진행 6) button Open Project 진행 7) Visual Studio Debug/Release 컴파일 진행. 8) 프로젝트중 "INSTALL"프로젝트만 따로 Build 진행. -> 위에서 선택한 결과 폴더에 결과물이 저장된다. 특히 "include"폴더 필요.
Local Project 만들기.(EXE, DLL) - Opencv의 Link혹은 Process오류(에러)를 제거 하기위해. 되도록 Link 구조는 동일 하게 유지 하자. 구성 속성 ->일반 -> MFC 사용 : "공유 DLL에서 MFC 사용" 구성 속성 ->C/C++ ->코드 생성->런타임 라이브러리 :"다중 스레드 디버그 DLL(/MDd and /MT)