![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
SQLite это исходный текст на ANSI-C.
Это должно быть собрано в машинный код, прежде чем это будет полезно.
Эта статья это справочник по различным способам собрать SQLite. Эта статья не содержит постепенный рецепт для компилирования SQLite.
Это было бы трудно, так как каждая ситуация отличается. Скорее эта статья
описывает и иллюстрирует принципы компиляции SQLite. Типичные команды
компиляции обеспечиваются как примеры с ожиданием, что разработчики
приложений могут использовать эти примеры в качестве руководства по
развитию их собственных процедур компиляции. Другими словами, эта статья
предоставляет идеи и понимание, а не готовые решения. SQLite строится из ста файлов распространения кода C через многочисленные
каталоги. Внедрение SQLite это чистый ANSI-C, но многие файлы исходного кода
языка C произведены или преобразованы вспомогательными программами C, AWK,
SED и скриптами TCL до того, как будут включены в законченную библиотеку
SQLite. Сборка необходимых программ C и преобразование и/или создание
исходного кода языка C для SQLite является сложным процессом. Кроме того SQLite также доступен как предварительно упакованный файл
исходного кода объединения:
sqlite3.c. Объединение это единственный файл кода
ANSI-C, который осуществляет всю библиотеку SQLite. Объединение намного легче
для работы. Все содержится в единственном кодовом файле, таким образом, легко
добавить его в исходное дерево большой программы C или C++.
Все шаги генерации кода и преобразования были уже выполнены, таким образом,
нет никаких вспомогательных программ C, чтобы формировать,
и никаких скриптов, чтобы выполнять.
И, потому что вся библиотека содержится в единственном файле
, компиляторы в состоянии сделать более передовую оптимизацию, приводящую к
5-10% повышению производительности. По этим причинам исходный файл
объединения ("sqlite3.c") рекомендуется для всех приложений. Построение SQLite непосредственно от отдельных файлов исходного кода,
конечно, возможно, но это не рекомендуется. Для некоторых специализированных
приложений могло бы быть необходимо изменить процесс сборки способами,
которые не могут быть сделаны, используя просто предварительно построенный
исходный файл объединения, загруженный с веб-сайта. Для тех ситуаций
рекомендуется, чтобы настроенное объединение собиралось
(как описано здесь)
и использовалось. Другими словами, даже если проект требует сборки SQLite из
отдельных исходных файлов, все еще рекомендуется, чтобы исходный файл
объединения использовался в качестве промежуточного шага. Сборка интерфейса командной строки
требует трех исходных файлов: Все три из вышеупомянутых исходных файлов содержатся в
объединении tarball доступном на
странице загрузки. Чтобы построить CLI, просто поместите эти три файла в тот же самый
каталог и соберите их вместе. Используя MSVC: В Unix (или в Windows с cygwin или mingw+msys),
как правило, команда выглядит примерно так: Библиотека pthreads необходима, чтобы сделать SQLite ориентированным
на многопотоковое исполнение. Но так как CLI однопоточен, мы могли бы собрать
SQLite в неориентированном на многопотоковое исполнение режиме
и таким образом опустить библиотеку pthreads: Библиотека -ldl необходима, чтобы поддержать динамическую загрузку,
интерфейс sqlite3_load_extension()
и функцию SQL load_extension()
. Если эти особенности не требуются, то они могут быть опущены, используя
выбор времени компиляции
SQLITE_OMIT_LOAD_EXTENSION: Можно было бы хотеть предоставить другие
возможности времени компиляции, например: Чтобы видеть дополнительный комментарий в списках
EXPLAIN, добавьте опцию
-DSQLITE_ENABLE_EXPLAIN_COMMENTS. Добавьте -DHAVE_READLINE и библиотеки
-lreadline и -lncurses, чтобы получить поддержку редактирования командной
строки. Можно было бы также хотеть определить некоторые параметры
компиляторной оптимизации. Предварительно собранный доступный для скачивания
CLI с веб-сайта SQLite использует "-Os".
Здесь есть бесчисленные возможные изменения. Команда, чтобы собрать
полнофункциональную оболочку, могла бы выглядеть примерно так: Ключевой пункт: сборка CLI
состоит из компилирования вместе двух файлов языка C.
shell.c содержит определение точки входа и циклы
ввода данных пользователем, а объединение SQLite sqlite3.c
содержит полноценное внедрение библиотеки SQLite. Интерфейс TCL для SQLite это
маленький модуль, который добавляется в регулярное объединение.
Результат это новый исходный файл, названный "tclsqlite3.c".
Этот единственный исходный файл это все, что необходимо, чтобы произвести
общую библиотеку, которая может быть загружена в стандартный
tclsh или
wish, используя команду
TCL load
или произвести автономный tclsh, который идет со встроенным SQLite.
Копия tcl-объединения есть на странице загрузки
как файл в TEA tarball. Чтобы произвести TCL-загружаемую библиотеку для SQLite на Linux, следующая
команда будет достаточна: Сборка разделенных библиотек для Mac OS X и Windows не
так проста, к сожалению. Для тех платформ лучше применить configure и
makefile, которые включены в TEA tarball. Чтобы произвести автономный tclsh, который статически связан с SQLite,
используйте эту команду: Уловка здесь опция -DTCLSH=1. Модуль интерфейса TCL для SQLite включает
процедуру main(), которая инициализирует интерпретатор TCL и входит в
цикл командной строки, когда это собрано с -DTCLSH=1. Команда выше работает
в Linux и Mac OS X, хотя, возможно, стоит приспособить варианты библиотеки в
зависимости от платформы и того, с какой версией TCL она будет работать. Версии объединения SQLite, которые поставляются на
странице загрузки, обычно достаточны для
большинства пользователей. Однако, некоторые проекты могут хотеть или должны
построить свои собственные объединения. Общая причина строительства своего
объединения в том, чтобы использовать определенные
варианты времени компиляции, чтобы настроить
библиотеку SQLite. Вспомните, что объединение SQLite содержит много C-кода
который произведен вспомогательными программами и скриптами.
Многие варианты времени компиляции производят этот произведенный код
и должны поставляться генераторам кода, прежде чем объединение будет собрано.
Набор вариантов времени компиляции, которые должны быть переданы в генераторы
кода, может измениться от одного выпуска SQLite к следующему, но во время
написания этого документа (примерно SQLite 3.6.20, 2009-11-04)
набор вариантов, которые должны быть известны генераторам кода, включает: Чтобы построить свое объединение, сначала загрузите оригинальные отдельные
исходные файлы на Unix или подобную Unix платформу разработки.
Обязательно получите файлы первоисточника не "preprocessed source files".
Можно получить полный набор файлов первоисточника со
страницы загрузки или непосредственно с
configuration management system. Предположим, что исходное дерево SQLite сохранено в каталоге "sqlite".
Запланируйте построить объединение в параллельном каталоге (например) "bld".
Сначала постройте соответствующий Make-файл, выполняя скрипт
configure наверху исходного дерева SQLite или делая копию одного из шаблонов
Make-файлов наверху исходного дерева. Затем отредактируйте Makefile,
чтобы включать желаемые варианты времени компиляции. Наконец выполните: Или в Windows с MSVC:
Цель make "sqlite3.c" автоматически построит регулярный
исходный файл объединения "sqlite3.c", его заголовочный файл
"sqlite3.h" и исходный файл объединения "tclsqlite3.c",
который включает интерфейс TCL. Впоследствии, необходимые файлы могут быть
скопированы в каталоги проекта и собраны согласно процедурам, обрисованным
в общих чертах выше. Чтобы построить DLL SQLite для использования в Windows, сначала получите
соответствующие соединенные файлы исходного кода sqlite3.c и sqlite3.h.
Они могут быть загружены с
сайта SQLite или произведены из исходных текстов, как показано выше. С файлами исходного кода в рабочем каталоге DLL
может быть произведена, используя MSVC со следующей командой: Вышеупомянутой командой нужно управлять от MSVC Native Tools Command
Prompt. Если у вас есть MSVC, установленный на вашей машине, у вас, вероятно,
есть многократные версии этой командной строки, поскольку для сборки под
x86 и x64, а возможно также для кросс-сборки для ARM.
Используйте соответствующую командную строку в зависимости
от желаемой DLL. Используя компилятор MinGW, командная строка: Обратите внимание на то, что MinGW производит только 32-битные DLL.
Есть отдельный проект MinGW64, который может использоваться, чтобы
произвести 64-битные DLL. По-видимому синтаксис командной строки подобен.
Также обратите внимание на то, что последние версии MSVC производят DLL,
которые не будут работать под WinXP и более ранними версиями Windows.
Таким образом для максимальной совместимости вашего произведенной
DLL рекомендуют MinGW. Хорошее эмпирическое правило это произвести 32-битные
DLL с использованием MinGW и 64-битные DLL, используя MSVC. В большинстве случаев вы захотите добавить основные команды выше с
вариантами времени компиляции, подходящими для
вашего запроса. Обычно используемые варианты времени компиляции включают: -Os Оптимизирует для размера.
Сделайте DLL как можно меньше. -O2 Оптимизируют для скорости. Это сделает DLL больше,
разворачивая функции inlining и циклы. -DSQLITE_ENABLE_FTS4 Включает
полнотекстовый поиск в SQLite. -DSQLITE_ENABLE_RTREE Включает
расширение R-Tree. -DSQLITE_ENABLE_COLUMN_METADATA Это позволяет некоторый
дополнительный API, который требуется некоторыми общими системами,
включая Ruby-on-Rails.
Choose any three.
Обзор
1. Объединение против отдельных исходных файлов
2. Компилирование интерфейса командной строки
cl shell.c sqlite3.c -Fesqlite3.exe
gcc shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl -lm -o sqlite3
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3
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
3. Компилирование интерфейса TCL
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm
4. Сборка объединения
make sqlite3.c
nmake /f Makefile.msc sqlite3.c
5. Сборка Windows DLL
cl sqlite3.c -link -dll -out:sqlite3.dll
gcc -shared sqlite3.c -o sqlite3.dll