Компилиране, инсталиране и използване на SQLite3 под CentOS 7 и 8Съдържание:
1. Предварителна информацияSQLite3 е SQL библиотека, която може да бъде интегрирана в широк набор приложения. Поддържа "in-memory" бази данни или такива, запазени като файл, в специфичен бинарен формат (не поддържа мрежово достъпен сървър от типа на PostgreSQL или MySQL). SQLite3 е най-използваната SQL библиотека в приложения и системен софтуер и работи под всички модерни операционни системи. Целта на този документ е да покаже как да бъде компилирана, инсталирана и използвана версия на SQLite3 библиотеката, с използване на Intel Compilers, за постигане на висока произовдителност. Трябва да се отчете, че по-висока производителност (в сравнение с кода на библиотеката, компилирана с GCC компилатор) може да се очаква само за някои SQL операции, като тези свързани с аритметични операции. За момента не се препоръчва библиотеката да се компилира с PGI Compilers, тъй като продукта на тази компилация не превъзхожда по скорост този, който е създаден чрез Intel Compilers или GNU Compilers.
2. Изтегляне на изходния код и компилирането му с Intel CompilersИнсталирайте следните системни пакети, които са нужни за да може SQLite3 библиотеката да използва компресия (през zlib) и за да може инструмента
Изтеглете програмния код на последната актуална версия на SQLite от страницата на проекта: https://sqlite.org/download.html На тази страница ще видите секция "Source code", в която има два варианта на архива с програмния код - "amalgamation" и "autoconf". Това, което ви е нужно е "autoconf" варианта на архива с програмния код. Имайте предвид и номерацията на версията в името на архивите. Например, "330010" означава версия 3.30.1, За примерите по-долу, се предполага, че версията на кода е "330010". В този случай, може да изтеглите архива с програмния код чрез $ mkdir ~/build $ cd ~/build $ wget https://sqlite.org/2019/sqlite-autoconf-3300100.tar.gz Разпакетирайте кода и влезте в директорията, която ще се създаде след разпакетирането: $ cd ~/build $ tar xvf sqlite-autoconf-3300100.tar.gz $ cd sqlite-autoconf-3300100 Използвайте $ CC=icc CFLAGS="-xHost -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_DISABLE_DIRSYNC=1 -DSQLITE_ENABLE_FTS3=3 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_SECURE_DELETE=1 -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_JSON1=1 -Wall -fno-strict-aliasing" ./configure --prefix=/home/vesso/unite/sqlite-3.30.1-icc --enable-fts5 --enable-threadsafe --enable-dynamic-extensions --enable-readline --enable-session $ make $ make install Отбележете, че във вашия случай, вие може да използвате друга директория за инсталацията и не е нужно задължиелно да имате върху файловата система След успешно завършване на инсталацията, може да изведете списък с библиотеките, към които е динамично свързана библиотеката $ ldd /usr/unite/sqlite-3.30.1-icc/lib/libsqlite3.so Трябва да получите изход, който е подобен на (записите в него може да варират, в зависимост от версията на Intel Compilers и CentOS дистрибуцията): linux-vdso.so.1 => (0x00007ffd9efb0000) libz.so.1 => /lib64/libz.so.1 (0x00007f966d442000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f966d226000) libimf.so => /usr/unite/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64/libimf.so (0x00007f966cc93000) libsvml.so => /usr/unite/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64/libsvml.so (0x00007f966b385000) libirng.so => /usr/unite/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64/libirng.so (0x00007f966b011000) libm.so.6 => /lib64/libm.so.6 (0x00007f966ad0f000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f966aaf9000) libintlc.so.5 => /usr/unite/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64/libintlc.so.5 (0x00007f966a88b000) libc.so.6 => /lib64/libc.so.6 (0x00007f966a4bd000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f966a2b9000) /lib64/ld-linux-x86-64.so.2 (0x00007f966dab1000) Най-важното, за което трябва да проверите в този списък с библиотеки, е наличието на свързани библиотеки от колекцията на Intel Compilers (като
3. Използване на компилираната библиотека в Python 3За да може Python3 (3.4 и по-висока версия) да използва така компилираната библиотека $ export LD_LIBRARY_PATH=/usr/unite/sqlite-3.30.1-icc/lib:$LD_LIBRARY_PATH За да проверите, че компилираната библиотека на SQLite3 е наистина достъпна за Python3 изпълнете: $ LD_LIBRARY_PATH=/usr/unite/sqlite-3.30.1-icc/lib:$LD_LIBRARY_PATH python3 -c "import sqlite3; print(sqlite3.sqlite_version)" Ако зареждането на библиотеката е успешно, ще получите числото на конкретната версия, която сте компилирали при вас (тук за примера е версия 3.30.1): 3.30.1
4. Динамично и статично свързване на компилираната библиотека към C/C++ приложенияЗа да може даден код да бъде компилиран спрямо динамичната версия на SQLite3 библиотеката, освен описание на използваните от нея функции в кода, в процеса на компилацията му трябва да бъдат посочени пътищата до хедър файловете и библиотеката: $ ./configure ... CGLAGS="-I/usr/unite/sqlite-3.30.1-icc/include" LFLAGS="-L/usr/unite/sqlite-3.30.1-icc/lib" или $ make ... CGLAGS="-I/usr/unite/sqlite-3.30.1-icc/include" LFLAGS="-L/usr/unite/sqlite-3.30.1-icc/lib" След успешна компилация спрямо динамичната версия на библиотеката, изпълнимият код трябва да може да зарежда $ export LD_LIBRARY_PATH=/usr/unite/sqlite-3.30.1-icc/lib:$LD_LIBRARY_PATH Това зареждане може да бъде направено инцидентно (примера по-горе) или да стане част от постоянните настройки за Bash сесията (те са обикновено във файла ВАЖНО! В системата, в която ще се изпълнява кода на приложението, към което е динамично свързана библиотеката Когато се използва статичната версия на SQLite3 библиотеката, самия файл с библиотеката се задава в списъка с бинарни обекти, на база на които компилатора създава изпълнимия код. Например: $ icc -o test test.c file1.o file2.o /usr/unite/sqlite-3.30.1-icc/lib/libsqlite3.a |
Последна актуализация: 12 октомври 2019
2019 УНИТе, Веселин Колев