2009/07/09
SQLite 컴파일하기 ( DLL 만들기 )
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로 바꾸면 된다.
실제 동작 여부는 아직 테스트 해
Original Post : http://neodreamer-dev.tistory.com/307
어렵사리 찾아서 정리를 해 보았다.
준비물
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로 바꾸면 된다.
실제 동작 여부는 아직 테스트 해
Original Post : http://neodreamer-dev.tistory.com/307
Labels:
SQLite
,
SQLite Compile
,
SQLite Dll
,
SQLite library
,
TistoryOldPost
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment