SQLite 홈페이지를 방문하면 동적 라이브러리(DLL) 파일(sqlite3.dll)을 쉽게 다운로드 받을 수 있다. 정적 라이브러리를 만들때나 직접 컴파일을 하였는데 64비트용 프로그램 개발에 필요하여 64비트 환경에서 만들어진 dll이 필요하여 컴파일 방법을 찾아 보았는데 정보가 많지 않았다.

어렵사리 찾아서 정리를 해 보았다.

준비물
   sqlite-source-3_6_16.zip
   sqlitedll-3_6_16.zip
   C++ Compiler ( Visual C++ 2005 )

우선 Visual C++ 2005에서 Win32 프로젝트 생성하고 응용프로그램 설정을 아래와 같이 종류를 DLL로 설정하고 추가 옵션에 "빈 프로젝트"로 설정한다.

생성된 프로젝트 폴더에 sqlite 소스 파일(sqlite-source-3_6_16.zip)을 풀어 놓고 sqlitedll-3_6_16.zip 파일에서 sqlite3.def 파일을 프로젝트 폴더에 풀어 놓는다.

프로젝트에 sqlite 소스 파일을 추가한다. 그리고 tclsqlite.c 와 shell.c 파일을 프로젝트에서 제거한다.

프로젝트 속성 페이지의 링크 메뉴의 입력 메뉴에서 모듈 정의 파일 항목에 sqlite3.def 로 설정한다.

위의 설정만으로 빌드를 하면 아래와 같은 링크 에러를 만나게 된다.
1>fts3_tokenizer.obj : error LNK2005: _sqlite3_api이(가) fts3.obj에 이미 정의되어 있습니다.
1>rtree.obj : error LNK2005: _sqlite3_extension_init이(가) fts3.obj에 이미 정의되어 있습니다.
1>rtree.obj : error LNK2005: _sqlite3_api이(가) fts3.obj에 이미 정의되어 있습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_database_name 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_database_name16 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_origin_name 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_origin_name16 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_table_name 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_column_table_name16 외부 기호를 확인할 수 없습니다.
1>sqlite3.def : error LNK2001: sqlite3_table_column_metadata 외부 기호를 확인할 수 없습니다.
1>D:\MyProject\VS\sqlite3\Debug\sqlite3.lib : fatal error LNK1120: 7개의 확인할 수 없는 외부 참조입니다.

위의 에러들을 없애기 위해 아래 내용을 전처리기 정의에 설정한다.
   SQLITE_ENABLE_FTS3
   SQLITE_ENABLE_RTREE
   SQLITE_ENABLE_COLUMN_METADATA

마지막으로 sqlite3ext.h 내용 중 일부를 수정한다.

원본 : #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
수정 : #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api;

최종 빌드한다.

위의 내용은 32비트에서 진행된 내용이다. 64비트용이라고 크게 다른건 아니고 구성 관리자에서 Win32 구성을 복사하여 x64구성을 만들고 전치리기 설정에서 WIN32를 WIN64로 바꾸면 된다.

실제 동작 여부는 아직 테스트 해보지 않았다.
Posted by NeoDreamer
:
BLOG main image
사람의 발목을 잡는건 '절망'이 아니라 '체념'이고 앞으로 나아가게 하는건 '희망'이 아니라 '의지'다. - 암스 중에서 - by NeoDreamer

공지사항

카테고리

전체보기 (793)
Life Story (1)
Thinking (2)
Nothing (5)
---------------* (0)
Dev Story (701)
Com. Story (80)
IT Story (1)
---------------+ (0)
Etc (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :
05-05 13:29