2011/04/14

SQLite 정적라이브러리(Static Library) 만들기 (Visual C++)

SQLite 3.7.5 이상의 버전에서는 ICU Unicode 모듈이 추가되어 이 모듈을 추가하거나 기능을 비활성화 하여야 한다.

Visual C++ 의 경우 ICU 모듈을 사용할 수 있어서 ICU4C 소스를 받아서 라이브러리에 포함 시켜준다. ICU4C 전체 소스는 필요없고 소스 파일 패키지(icu4c-4_6_1-src.zip)에서 source/common/unicode 폴더가 필요하며 부가적으로 source/i18n/unicode/uregex.h 파일이 필요하다.

진행에 사용한 버전은 SQLite 3.7.6.1 버전과 Visual C++ 2005, 2010 버전이다.

아래는 Visual C++ 에서 SQLite Static Library 를 만들기 위한 프로젝트 구조이다.   SQLiteStatic      - icu         - unicode      - sqlite      - SQLiteStatic2005      - SQLiteStatic2010
 unicode 폴더에는 icu4c 소스의 source/common/unicode 폴더에 포함 된 파일들과 source/i18n/unicode/uregex.h 을 넣어 두었다.

sqlite 폴더에는  sqlite-preprocessed-3070601.zip 의 파일들과 sqlite-src-3070601.zip 의 sqlite-src-3070601/ext/rtree 폴더에 포함되어 있는 sqlite3rtree.h 파일을 복사해 두었다.

위와 같이 파일들을 준비하고 메인프로젝트 하위에 Visual C++ 2005 와 Visual C++ 2010 버전을 위한 프로젝트를 만들었다. 두 버전의 프로젝트 설정은 동일하다.

Visual C++로 "Win32 Consol Application" 을 생성한다. 생성할 때 응용프로그램 설정(Application Settings)에서 정적 라이브러리(Static Library) 를 선택하고 미리 컴파일된 헤러(Precompiled header)를 사용하지 않도록 만든다.



만들어진 프로젝트에 sqlite 경로에 있는 파일들(fts1*, fts2* 파일들과 tclsqlite.c 제외)을 추가한다.

마지막으로 아래와 같은 프로젝트 설정을 한다.
General/Additional Include Directories :
..\icu
Preprocessor/Preprocessor Definitions :
NO_TCL _CRT_SECURE_NO_WARNINGS (optional) SQLITE_ENABLE_BROKEN_FTS1=1 SQLITE_ENABLE_BROKEN_FTS2=1
Code Generation/Runtime Library :
Multi-threaded (Release) Multi-threaded Debug (Debug)
Advanced/Disable Specific Warnings
4267;4244;4018;4311;4996;4312 (optional) 


설정을 마치고 컴파일을 하면 SQLite 정적 라이브러리를 얻을 수 있다.

64비트가 필요할 경우 64비트 Platform 을 추가하고 
Preprocessor/Preprocessor Definitions 항목의 WIN32를 WIN64로 변경하고 컴파일 하면 된다.

만들어진 라이브러리를 테스트 해 보았는데 
Visual C++ 2005 버전 프로젝트에 사용하려면 Visual C++ 2005 버전으로 만든 정적 라이브러리를 사용하여야 완벽한 동작을 보장 받을 수 있을 것 같았다. (Visual C++ 2010 버전도 동일함.)



2011/02/08 - [Dev Story] - SQLite 3.7.5.0 Library (정적/동적) for C++ Builder and Visual C++
2008/12/07 - [Dev Story/Tips] - Visual C++ 용 SQLite 정적 라이브러리 만들기 


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

No comments :

Post a Comment