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 개발자 명령 프롬프트 실행하기
![[C] SQLite 라이브러리 빌드하기 : 윈도우 dll 또는 리눅스 so 로 빌드하자 1 [C] SQLite 라이브러리 빌드하기 : 윈도우 dll 또는 리눅스 so 로 빌드하자](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2024/04/AC_20240416-090955.png?resize=616%2C650&ssl=1)
위의 그림처럼 개발자 프롬 프롬프트를 실행합니다.
필자는 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/