Spec-Zone.ru › SQLite

Как скомпилировать SQLite

Содержание
1. Обзор
2. Амальгамация и отдельные исходные файлы
3. Компиляция интерфейса командной строки
4. Компиляция интерфейса TCL
5. Создание амальгамации
6. Создание DLL для Windows

1. Обзор

Скомпилируйте SQLite следующим образом:

  • Unix и Mac → ./configure && make
  • Windows → nmake /f Makefile.msc

Приведённые выше команды создадут амальгамацию и интерфейс командной строки (также известный как CLI). Обязательных зависимостей нет, поэтому приведённые выше команды должны работать при наличии установленного компилятора. Стороннее программное обеспечение не требуется. Подробнее см. в документах:

  • https://sqlite.org/src/doc/trunk/doc/compile-for-unix.md
  • https://sqlite.org/src/doc/trunk/doc/compile-for-windows.md

Однако эта статья не содержит пошаговых инструкций по компиляции SQLite. Вместо этого в ней описаны принципы, лежащие в основе компиляции SQLite. Типичные команды компиляции приведены в качестве примеров, чтобы разработчики приложений могли использовать их как руководство при разработке собственных процедур сборки. Другими словами, эта статья предлагает идеи и полезные сведения, а не готовые решения. Поэтому, если приведённые выше команды для быстрого начала работы не отвечают на ваши вопросы, читайте дальше.

2. Амальгамация и отдельные исходные файлы

SQLite собирается более чем из ста файлов с кодом на C и сценариями, размещённых в нескольких каталогах. Реализация SQLite написана на чистом ANSI-C, однако многие исходные файлы на языке C перед включением в готовую библиотеку SQLite генерируются или преобразуются вспомогательными программами на C и сценариями AWK, SED и TCL. Сборка необходимых программ на C, а также преобразование и/или создание исходного кода SQLite на языке C — сложный процесс.

Чтобы упростить эту задачу, SQLite также доступна в виде заранее подготовленного файла исходного кода — амальгамации: sqlite3.c. Амальгамация представляет собой один файл с кодом на ANSI-C, реализующий всю библиотеку SQLite. С ней гораздо проще работать. Весь код находится в одном файле, поэтому его легко добавить в дерево исходного кода более крупной программы на C или C++. Все этапы генерации и преобразования кода уже выполнены, поэтому не требуется настраивать и компилировать вспомогательные программы или запускать сценарии. Кроме того, поскольку вся библиотека содержится в одном модуле трансляции, компиляторы могут выполнять более сложные оптимизации, что повышает производительность на 5–10%. По этим причинам для всех приложений рекомендуется использовать файл исходного кода амальгамации («sqlite3.c»).

Для всех приложений рекомендуется использовать амальгамацию — либо заранее собранную и загруженную с веб-сайта, либо собранную самостоятельно из канонических исходных файлов.

Библиотеку SQLite можно связать с приложением, используя отдельные файлы исходного кода. Однако гораздо проще загрузить амальгамацию или собрать её самостоятельно с помощью цели make «sqlite3.c», а затем использовать её на последующих этапах сборки. Для некоторых специализированных приложений может потребоваться собственная сборка амальгамации с нестандартными параметрами компиляции вместо использования готовой амальгамации с веб-сайта. Другими словами, даже если проект требует начинать сборку SQLite с отдельных исходных файлов, всё равно рекомендуется использовать файл амальгамации в качестве промежуточного этапа.

3. Компиляция интерфейса командной строки

Для сборки интерфейса командной строки требуются три исходных файла:

  • sqlite3.c: файл исходного кода амальгамации SQLite
  • sqlite3.h: заголовочный файл, соответствующий sqlite3.c и определяющий интерфейсы SQLite на языке C.
  • shell.c: сама программа интерфейса командной строки. Это файл исходного кода на C, содержащий определение процедуры main() и цикла, который запрашивает пользовательский ввод и передаёт его ядру базы данных SQLite для обработки.

Все три указанных выше исходных файла входят в состав архива амальгамации, доступного на странице загрузки. Их также можно собрать из канонических исходных файлов с помощью цели make «sqlite3.c».

Чтобы собрать CLI, поместите эти три файла в один каталог и скомпилируйте их вместе. При использовании MSVC:

cl shell.c sqlite3.c -Fesqlite3.exe

В Unix-системах команда обычно выглядит примерно так:

gcc shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3

Для обеспечения потокобезопасности SQLite требуется библиотека pthreads. Однако, поскольку CLI работает в одном потоке, можно указать SQLite собираться в непотокобезопасном режиме и тем самым не использовать библиотеку pthreads:

gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl -lm -o sqlite3

Библиотека -ldl нужна для поддержки динамической загрузки, интерфейса sqlite3_load_extension() и SQL-функции load_extension(). Если эти возможности не нужны, их можно отключить с помощью параметра компиляции SQLITE_OMIT_LOAD_EXTENSION:

gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -lm -o sqlite3

Можно указать и другие параметры компиляции, например:

  • -DSQLITE_ENABLE_FTS4 или -DSQLITE_ENABLE_FTS5 для полнотекстового поиска,
  • -DSQLITE_ENABLE_RTREE для расширения поискового механизма R*Tree,
  • -DSQLITE_ENABLE_DBSTAT_VTAB для виртуальной таблицы dbstat или
  • -DSQLITE_ENABLE_MATH_FUNCTIONS для расширенных математических функций.

Чтобы в выводе EXPLAIN отображались дополнительные пояснения, добавьте параметр -DSQLITE_ENABLE_EXPLAIN_COMMENTS. Чтобы включить редактирование командной строки, добавьте -DHAVE_READLINE, а также библиотеки -lreadline и -lncurses. Возможно, также потребуется указать параметры оптимизации компилятора. (В предварительно скомпилированной версии CLI, доступной для загрузки с веб-сайта SQLite, используется «-Os».) Здесь возможно множество вариантов. Команда для компиляции оболочки с полным набором функций может выглядеть примерно так:

gcc -Os -I. -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_FTS4 \
   -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \
   -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
   -DHAVE_READLINE \
   shell.c sqlite3.c -ldl -lm -lreadline -lncurses -o sqlite3

Главное вот что: сборка CLI заключается в компиляции вместе двух файлов на языке C. Файл shell.c содержит точку входа и цикл обработки пользовательского ввода, а амальгамация SQLite sqlite3.c — полную реализацию библиотеки SQLite.

4. Компиляция интерфейса TCL

Интерфейс TCL для SQLite — это небольшой модуль, который добавляется к обычной амальгамации. В результате создаётся новый объединённый файл исходного кода под названием «tclsqlite3.c». Этого единственного файла исходного кода достаточно, чтобы создать разделяемую библиотеку, которую можно загрузить в стандартную среду tclsh или wish с помощью команды загрузки TCL, либо создать автономную среду tclsh со встроенной SQLite.

Чтобы создать библиотеку SQLite для загрузки в TCL в Linux, достаточно выполнить следующую команду:

gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

К сожалению, создание разделяемых библиотек для Mac OS X и Windows устроено гораздо сложнее.

Чтобы создать автономную среду tclsh со статически скомпонованной SQLite, используйте следующую команду компилятора:

gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

Ключевой момент здесь — параметр -DTCLSH=1. Модуль интерфейса TCL для SQLite содержит процедуру main(), которая инициализирует интерпретатор TCL и запускает цикл обработки командной строки, если он скомпилирован с параметром -DTCLSH=1. Приведённая выше команда работает как в Linux, так и в Mac OS X, хотя, в зависимости от платформы и используемой версии TCL, параметры библиотек, возможно, потребуется скорректировать.

5. Создание амальгамации

Версии амальгамации SQLite, представленные на странице загрузки, обычно подходят большинству пользователей. Однако некоторым проектам может понадобиться или потребоваться создавать собственные амальгамации. Частая причина создания собственной амальгамации — необходимость использовать определённые параметры компиляции для настройки библиотеки SQLite. Напомним, что амальгамация SQLite содержит большой объём кода на C, созданного вспомогательными программами и сценариями. Многие параметры компиляции влияют на этот сгенерированный код и должны быть переданы генераторам кода до сборки амальгамации. Набор параметров компиляции, которые необходимо передать генераторам кода, может меняться от одного выпуска SQLite к другому, но на момент написания этой статьи (примерно SQLite 3.6.20, 2009-11-04) генераторам кода требовалось знать следующие параметры:

  • SQLITE_ENABLE_UPDATE_DELETE_LIMIT
  • SQLITE_OMIT_ALTERTABLE
  • SQLITE_OMIT_ANALYZE
  • SQLITE_OMIT_ATTACH
  • SQLITE_OMIT_AUTOINCREMENT
  • SQLITE_OMIT_CAST
  • SQLITE_OMIT_COMPOUND_SELECT
  • SQLITE_OMIT_EXPLAIN
  • SQLITE_OMIT_FOREIGN_KEY
  • SQLITE_OMIT_PRAGMA
  • SQLITE_OMIT_REINDEX
  • SQLITE_OMIT_SUBQUERY
  • SQLITE_OMIT_TEMPDB
  • SQLITE_OMIT_TRIGGER
  • SQLITE_OMIT_VACUUM
  • SQLITE_OMIT_VIEW
  • SQLITE_OMIT_VIRTUALTABLE

Чтобы создать собственную амальгамацию, сначала загрузите исходные отдельные файлы на платформу разработки Unix или Unix-подобную систему. Обязательно загрузите оригинальные исходные файлы, а не «предварительно обработанные исходные файлы». Полный набор оригинальных исходных файлов можно получить на странице загрузки или напрямую из системы управления конфигурацией.

Предположим, что дерево исходного кода SQLite находится в каталоге с именем «sqlite». Запланируйте создать амальгамацию в соседнем каталоге, например «bld». Сначала создайте подходящий Makefile: запустите сценарий configure в корне дерева исходного кода SQLite или скопируйте один из шаблонных Makefile, расположенных в корне дерева исходного кода. Затем вручную отредактируйте этот Makefile, добавив нужные параметры компиляции. В завершение выполните:

make sqlite3.c

Или в Windows с MSVC:

nmake /f Makefile.msc sqlite3.c

Цель make «sqlite3.c» автоматически создаст обычный файл исходного кода амальгамации «sqlite3.c», соответствующий ему заголовочный файл «sqlite3.h» и файл исходного кода амальгамации «tclsqlite3.c», включающий интерфейс TCL. После этого необходимые файлы можно скопировать в каталоги проекта и скомпилировать согласно описанным выше процедурам.

6. Создание DLL для Windows

Чтобы создать DLL SQLite для использования в Windows, сначала получите соответствующие файлы исходного кода амальгамации: sqlite3.c и sqlite3.h. Их можно загрузить с веб-сайта SQLite или создать самостоятельно из исходных файлов, как описано выше.

Если исходные файлы находятся в рабочем каталоге, DLL можно создать с помощью MSVC следующей командой:

cl sqlite3.c -link -dll -out:sqlite3.dll

Приведённую выше команду следует выполнять из командной строки MSVC Native Tools. Если на компьютере установлен MSVC, вероятно, доступны несколько версий этой командной строки: для нативной сборки под x86 и x64, а также, возможно, для кросс-компиляции под ARM. Выберите командную строку, соответствующую требуемой DLL.

При использовании компилятора MinGW командная строка выглядит так:

gcc -shared sqlite3.c -o sqlite3.dll

Обратите внимание: MinGW создаёт только 32-разрядные DLL. Для создания 64-разрядных DLL существует отдельный проект MinGW64. Предполагается, что синтаксис командной строки аналогичен. Также обратите внимание: последние версии MSVC создают DLL, которые не работают в WinXP и более ранних версиях Windows. Поэтому для максимальной совместимости созданной DLL рекомендуется MinGW. Как правило, 32-разрядные DLL следует создавать с помощью MinGW, а 64-разрядные — с помощью MSVC.

В большинстве случаев к приведённым выше основным командам следует добавить параметры компиляции, подходящие для вашего приложения. Обычно используются следующие параметры компиляции:

  • -Os — оптимизация по размеру. DLL будет как можно меньше.

  • -O2 — оптимизация по скорости. DLL станет больше из-за разворачивания циклов и встраивания функций.

  • -DSQLITE_ENABLE_FTS4 — включить код механизма полнотекстового поиска в SQLite.

  • -DSQLITE_ENABLE_RTREE — включить расширение R-Tree.

  • -DSQLITE_ENABLE_COLUMN_METADATA — включить дополнительные API, необходимые некоторым распространённым системам, в том числе Ruby-on-Rails.

Последнее обновление этой страницы: 2025-11-13 07:12:58Z

SQLite is in the Public Domain.
https://sqlite.org/howtocompile.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API