[간단팁] SQLite 컴파일 하기.. 본문

프로그램 일반

[간단팁] SQLite 컴파일 하기..

keydisk 2008. 10. 3. 01:45

SQLite 컴파일 하기..

 

현재 최신버전이 3.6.3 이더군요...

 

돌아다니는 문서들을 보면..

3.3.x 기준인거 같더군요..

 

이 문서에 따르면 컴파일시.. 오류가 나는데..

 

"tcl.h" 파일이 없는 오류입니다..

 

이것을 피하려면.. 컴파일시에 NO_TCL 를 정의하면 됩니다..

PreDefine 하면 되는데요..

 

이렇게 해결은 되는데..

 

문제는 3.6.3 에서는 이렇게 해결이 안됩니다...

 

해당 c 파일에 NO_TCL 관련해서 #ifndef 가 되어있지 않다는 겁니다..

그렇다고 해당 c 파일을 제거한다해도 오류가 납니다..

 

따라서 해결 방법은..

 

1. SQLite 사이트의 다운로드 페이지에서 소스를 받는데.. "sqlite-amalgamation-3_6_3.zip (899.86 KiB)" 를 받습니다..

 "sqlite-source-3_6_3.zip (920.60 KiB) " 도 밑에 보면 있지만.. 이걸로는 잘 해결이 안됩니다...

 

sqlite-amalgamation-3_6_3.zip 이 소스는 이름에서와 같이 모든 소스들을 병합하여 달랑 3개의 파일로 구성한겁니다.

sqlite-source-3_6_3.zip  부분의 코멘트를 보면 sqlite-amalgamation-3_6_3.zip 를 받으라고 강력히 추천하더군요..

일단 sqlite-amalgamation-3_6_3.zip 을 받습니다.

 

 

2. 압축을 풀면 딸랑 파일 3개가 나옵니다.

이것을 vc++6 에 불러옵니다..물런 dll 프로젝트를 생성하시구요...

 

3. 그리고.. 컴파일 전에 다운로드 사이트에서 dll 윈도우즈용 바이너리 파일도 받습니다..

그리고 압축을 풀면. dll 파일과, def 파일이 나오는데.. 이 def 파일을 dll 프로젝트에 임포트 합니다.

 

4. 그리고 컴파일 하면.. unresolved 라는 오류가 납니다. .자세히 보면 def 파일에 export 하려고하는 함수입니다.

이게 정의가 안되었다고 나오는건데... 물론 def 에 해당 오류나는 파일을 지워주면 됩니다.

하지만  웬지 찜찜합니다..함수 몇개가 빠지니...

 

잘 소스를 찾아보면 

#ifndef SQLITE_ENABLE_COLUMN_METADATA
# define sqlite3_column_database_name   0
# define sqlite3_column_database_name16 0
# define sqlite3_column_table_name      0
# define sqlite3_column_table_name16    0
# define sqlite3_column_origin_name     0
# define sqlite3_column_origin_name16   0
# define sqlite3_table_column_metadata  0
#endif

 

같은 내용을 확인할수 있습니다.

 

맞습니다.. SQLITE_ENABLE_COLUMN_METADATA 것이 정의되어있지 않으면..

해당 함수를 0 으로 정의 되므로 컴파일시 오류가 나는겁니다..

 

그래서 Project>Settings>Preprocessor definitions 란에..

SQLITE_ENABLE_COLUMN_METADATA

을 넣어주면 됩니다.

 

5. 컴파일을 합니다.

그러면 해당 dll 이 똑 떨어질겁니다...흠..

 

이런식으로 static library 를 만들수 있고..

WindowsCE 에서도 컴파일하여 사용할 수도 있습니다.