2012/02/06

Visual C++ 2005 와 SQLite 3.7.10

SQLite 가 공개가 되면 프로젝트에 사용적용하기 위해 64비트용 dll과 static 라이브러리를 만들었다.

그런데 이번 3.7.10 버전은 Visual C++ 2005 버전에서 컴파일은 문제 없으나 데이터베이스 생성시 런타임 에러가 발생하였다. Visual C++ 2010 버전에서는 문제가 발생하지 않았다.

amalgamation 을 이용하여 SQLite를 프로젝트에 포함을 시켜도 증상은 동일하였다.



관련 정보를 찾아보다가 그 원인과 해결책을 찾았다.

참고가 된 정보는 
http://www.sqlite.org/src/info/1ce4d21d52  이다. 

Visual C++ 2005 버전에서는 _WIN32_WINNT 가 기본적으로 정의가 되지 않아 sqlite3.c 컴파일 때 Window로 인식하하지 않아 런타임 에러가 발생하는 것이였다.



해결책은 sqlite3.c 파일을 수정하면 된다.

수정해야할 내용은 문제의 정보가 있는
http://www.sqlite.org/src/info/1ce4d21d52 있는 방법대로


#if defined(_WIN32_WINNT)


# define SQLITE_OS_WINNT 1


#else


# define SQLITE_OS_WINNT 0

#endif



부분을 아래 내용을 바꾸면 된다. 


#if SQLITE_OS_WIN && !defined(SQLITE_OS_WINNT)


# define SQLITE_OS_WINNT 1

#endif 



더 간단한 방법은 sqlite3.c 가장 윗줄에 _WIN32_WINNT 을 define 해주면 된다.

#define _WIN32_WINNT 0x0500 &

Original Post : http://neodreamer-dev.tistory.com/637

No comments :

Post a Comment