C 언어를 사용하여 SQLite 라이브러리를 빌드하는 방법에 대한 가이드입니다. SQLite를 사용하여 강력한 데이터베이스를 구축하고 프로그램에 통합하세요.
윈도우즈에서 dll로 빌드하기
1. SQLite 공식 사이트로 가셔서 최신 소스코드를 받습니다.
https://www.sqlite.org/download.html
받을 파일은 sqlite-amalgamation-XXXXXXX.zip 입니다.
받으셔서 압축을 풀어보시면 파일이 4개뿐입니다.
shell.c
sqlite3.c
sqlite3.h
sqlite3ext.h
단순하게 프로젝트에 포함시켜도 됩니다. 그런데 이 sqlite3.c 파일은 용량이 어마어마합니다. 소스를 몽땅 한 파일에 넣어서 배포를 한 것이게 때문에 파일 용량이 크며 빌드시간 또한 큽니다. 그래서 dll로 로 만들어 사용하면 빌드시간 단축 여러 프로그램에서 접근시 용량절약 등의 이점이 있습니다.
2. VS 개발자 명령 프롬프트 실행하기
위의 그림처럼 개발자 프롬 프롬프트를 실행합니다.
필자는 Visual Studio 2017로 프로젝트를 진행중입니다.
이제 위의 개발자 프롬프트에서 압축을 풀었던 폴더로 이동합니다.
저는 D:\sqlite-amalgamation-3450300 에 압축을 풀었고요 명령 프롬프트에서 드라이브 전환은 D: 그리고 폴더 전환은 cd D:\sqlite-amalgamation-3450300 입니다.
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.36
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional>d:
D:\>cd D:\sqlite-amalgamation-3450300
D:\sqlite-amalgamation-3450300>
3. DLL 빌드하기
cl sqlite3.c -DSQLITE_API=__declspec(dllexport) -link -dll -out:sqlite3.dll
아주 간단합니다. 위 명령어만 치면 해당 폴더에 sqlite3.dll 이 생성 됩니다.
4. 암시적 링킹하기
여기서 의문이 생깁니다. 단순 dll 을 어떻게 다른 프로젝트에서 링크걸어서 사용을 하지? api 문서를 일일히 찾아서 LoadLibrary(), GetProcAddress(), FreeLibrary()의 세가지 함수를 통해 명시적으로 구현 할 수 있습니다. 그런데 명시적 링킹은 사용하기 너무 어렵습니다.
암시적으로 링킹을 시도하겠습니다. 그러기 위해서 필요한 파일은
sqlite3.dll, sqlite3.lib, sqlite3.h 입니다. sqlite3.lib 을 만들어내야 암시적으로 링크할 수 있겠네요.
먼저 sqlite3.dll 을 이용해서 sqlite3.def 를 만들고 그리고 그 def 파일을 통해서 lib 를 만들어야 합니다.
다음처럼 명령 프롬프트에서 타이핑합니다.
dumpbin /EXPORTS sqlite3.dll /OUT:sqlite3.def
dumpbin 은 이진 파일의 정보를 표시해주는 명령어 입니다.
이제 sqlite3.def 파일이 생성 되었습니다.
그런데 여기서 한가지 작업을 해줘야 합니다.
sqlite3.def를 열어 보면
Dump of file sqlite3.dll
File Type: DLL
Section contains the following exports for sqlite3.dll
00000000 characteristics
FFFFFFFF time date stamp
0.00 version
1 ordinal base
284 number of functions
284 number of names
ordinal hint RVA name
1 0 000050A0 sqlite3_aggregate_context
2 1 00004B50 sqlite3_aggregate_count
.
.
.
위와 같은 형식으로 되어 있습니다.
그런데 아래와 같은 형식으로 직접 수정해 주셔야 합니다.
EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
sqlite3_autovacuum_pages
.
.
.
sqlite3_win32_write_debug
마지막으로 명령 프롬프트에서
lib /def:sqlite3.def /out:sqlite3.lib
이제 sqlite3.lib 가 생성 되었습니다.
모든준비는 끝났습니다.
sqlite3.dll, sqlite3.lib, sqlite3.h 를 다른 프로젝트에서 암시적 링크로 사용 하시면됩니다.
리눅스에서 so 빌드하기
다음 위치에서 소스를 다운받습니다.
https://www.sqlite.org/download.html
dll 빌드때와는 다르게 받을 파일은 sqlite-autoconf-XXXXXX.tar.gz 입니다.
압축을 풀면 여러 파일들이 존재합니다.
이제 Linux 의 특정 폴더에 압축을 풀고 빌드를 시작 하겠습니다.
./configure --prefix=/home/root/sqlite-autoconf-3450300/lib
저는 /home/root/sqlite-autoconf-3450300 폴더에 압축을 푼 상황입니다.
–prefix=/home/root/sqlite-autoconf-3450300/lib 는 최종 output 폴더입니다.
아래 두개의 명령어를 입력합니다.
make
make install
이제 /home/root/sqlite-autoconf-3450300/lib 폴더에 include, lib 폴더들이 잘 정돈된 상태로 존재 합니다.
타 프로젝트에서 해당 lib폴더를 잘 링크해서 사용 하면 되겠습니다.
결론
sqlite 를 dll 또는 so로 빌드하는 방법을 배웠습니다. 이 글이 도움이 되셨기를 기원합니다.
My brother recommended I might like this web site.
He wass enirely right. This post actually made my day.
You can not imagine just hoow much time I had pent for this info!
Thanks! http://boyarka-inform.com/