저는 2010에서 2.3.1 버전 컴파일 했는데요.
인내심을 가지고 하나하나 컴파일 에러 나는 부분 수정하거나 수정 안되는 부분은 주석 처리해야합니다.
아래는 제가 수정하거나 주석처리한 부분 대충 정리한 건데 참고만 하세요.
다른 분들도 보시고 제가 잘못한 부분 있으면 지적해주시면 감사하겠습니다.
* Error Fix가 주된 내용이니 준비 과정은 간략하게 설명.
1. OpenCV 2.3.1 받아 CMake로 VC++ 2008 컴파일 프로젝트 만들고 VC++2008로 새로 컴파일 함.
(그냥 배포 버전에 있는 DLL 사용시 런타임 에러 발생함)
2. 새로 컴파일 한 DLL을 implib로 LIB 추출해서사용.
3. 해더 파일과 LIB, DLL 위치 잡고 개발 프로젝트에 적절하게 링크함.
4. 컴파일 진행 하면서 Error Fix.
core.hpp : 4026 line ----------------------------------------------------------------
FileNode operator ->() const;
-> 수정.
FileNode * operator ->() const;
operations.hpp : 77 line. -----------------------------------------------------------
#include
#define CV_XADD(addr,delta) _InterlockedExchangeAdd((long volatile*)(addr), (delta))
-> 수정.
//#include // 주석 처리.
#define CV_XADD(addr,delta) InterlockedExchangeAdd((long volatile*)(addr), (delta)) // _InterlockedExchangeAdd -> InterlockedExchangeAdd 로 변경.
operations.hpp : 422 line. -----------------------------------------------------------
template inline
Matx<_Tp, MIN(m,n), 1> Matx<_Tp, m, n>::diag() const
{
diag_type d;
for( int i = 0; i < MIN(m, n); i++ )
d.val[i] = val[i*n + i];
return d;
}
-> 주석처리. (왜 컴파일 안되는 거야 Builder는 ㅡㅡ;;;)
//template inline
//Matx<_Tp, MIN(m,n), 1> Matx<_Tp, m, n>::diag() const
//{
// diag_type d;
// for( int i = 0; i < MIN(m, n); i++ )
// d.val[i] = val[i*n + i];
// return d;
//}
operations.hpp : 1771 line. -----------------------------------------------------------
-> 구조체 전체 복사를 각각의 맴버 변수로 복사하도록 함. (왜 타입 태스팅이 안되는 거야.. ㅡㅡ;;)
inline RotatedRect::operator CvBox2D() const
{
CvBox2D box;
//box.center = center;
box.center.x = center.x;
box.center.y = center.y;
//box.size = size;
box.size.width = size.width;
box.size.height = size.height;
box.angle = angle;
return box;
}
operations.hpp : 2817 line. -----------------------------------------------------------
inline FileNode FileNodeIterator::operator ->() const
{ return FileNode(fs, (const CvFileNode*)reader.ptr); }
-> 리턴형을 pointer로 변경. * 추가, & 추가.
inline FileNode* FileNodeIterator::operator ->() const // FileNode -> FileNode* 로 수정.
{ return &FileNode(fs, (const CvFileNode*)reader.ptr); } // FileNode -> &FileNode 로 수정.
Features2d.hpp : 2565 line. -----------------------------------------------------------
-> 아래 클래스 전체 주석처리. ㅡㅡ;;;
class CV_EXPORTS FlannBasedMatcher : public DescriptorMatcher
dist.h 57 line -------------------------------------------------------------------------
template<>
inline float abs(float x) { return fabsf(x); }
-> fabsf() 함수 없어서 fabs로 변경. (fabsf()는 어디에 있는 거냥??)
template<>
inline float abs(float x) { return fabs(x); } // fabsf() 함수 없어서 fabs로 변경.
Calib3d.hpp 535 line -------------------------------------------------------------------
CV_EXPORTS bool findCirclesGrid( InputArray image, Size patternSize,
OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID,
const Ptr &blobDetector = new SimpleBlobDetector());
-> (Ptr) 추가.
CV_EXPORTS bool findCirclesGrid( InputArray image, Size patternSize,
OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID,
const Ptr &blobDetector = (Ptr)(new SimpleBlobDetector()));
그 아이 님이 쓰신 글 :
: 제가 좀 급하게 OpenCV 2.2를 RAD C++Builder 2007 에 적용하려고 할려하는데요.
: 망치님께서 올려주신 것을 naver블로그에 설명한데로 했는데도 core.h에서 에러가
: 많이 나는데요, 좀 접근 빨리 할 수 있는 방법좀 알려 주세요.!