안녕하세요.
OpenCV 2.4.2를 다운 받아 XE2에서 사용하고자 하는데 문제가 생겨서 문의올립니다.
1. OpenCV 2.4.2 다운
2. CMake로 VS2008용 만듦
3. VS2008에서 빌드
4. implib -a 로 lib 생성
5. opencv.org에서 c++ builder 관련 patch 내용에 따라 헤더 파일 수정
위와 같은 순서로 한 후에,
lib파일 있는 곳을 Project Option->Library Path 경로 추가
#pragma comment(lib, "opencv_core242.lib")
#pragma comment(lib, "opencv_highgui242.lib")
cv::Mat image = cv::imread("C:\\1.bmp");
cv::Mat image= cv::imread("img.jpg");
cv::namedWindow("My Image");
cv::imshow("My Image", image);
컴파일은 잘 되는데, 링크 에러가 납니다.
Unresolved external 'cv::Mat::deallocate()' referenced from .....
Unresolved external 'cv::fastFree(void*)' referenced from .....
Unable to perform link
위와 같이 나옵니다.
해결해 볼려고 이틀째 삽질 중인데 도저히 이유를 모르겠습니다.
시도해본 방법
1. 구글링을 통해 XE2에서 잘된다는 OpenCV 232 lib, dll, Test project을 받아서 테스트해봄
-> cv::Mat는 사용하질 않는 소스인데 링크 에러 없이 실행은 되나, CUDA dll 버전이 맞질 않아 제대로 테스트 해보질 않음
-> cv::Mat....로 코딩 넣어보면 위와 같은 'Unresolved .... ' 에러 발생
2. CMake로 변환하지 않고 OpenCV 2.4.2 설치 파일에 있는 DLL 사용
-> 같은 에러 발생
3. CMake에서 C++ Builder로 선택해서 해봄
-> 같은 에러 발생
4. VS2008에서 일괄 Buildr가 아닌 개별적으로 Build
-> 같은 에러 발생
기타 등등.....
그러다가... 아래와 같이 해봤더니 잘됩니다.
IplImage* img = cvLoadImage("D:\\1.jpg", -1);
if(img != 0)
{
cvNamedWindow("test", 0);
cvShowImage("test", img);
cvWaitKey(0);
cvReleaseImage(&img);
}
왜 cv::Mat은 안되는건지 모르겠습니다.
C++ Builder와의 호환성에 문제가 있는거지...
....
조언 부탁드립니다..
언제나 그렇듯 구글링 하다보면, 프랑스, 러시아, 아랍어, 중국어, 일본어 사이트.... 안가보는 곳이 없는데...
그래도 c++ 빌더에 관한 정보 찾기가 하늘에 별따기네요..
빌더가 이렇게 힘든 개발 툴인지 ..ㅠ.ㅠ...