Bootstrap

Ubuntu编译安装sqlite3库

基础环境说明:本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统。进行sqlite3 数据库源码编译和库函数生成。

sqlite3的简介

什么是SQLite3?

sqlite3是一个进程内的库,实现了自给自足、无服务器、零配置、事务性的SQL数据库引擎。它是一个增长最快的数据库引擎。它不是一个独立的进程,可以按应用程序需求进行静态或动态连接,SQLite直接访问其存储文件。


为什么要使用sqlite

不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理。
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)Windows(Win32, WinCE, WinRT)中运行。

Ubuntu编译安装sqlite3

第一步:访问sqlite3 官方网站,下载自动编译源文件。https://www.sqlite.org/

下载 sqlite-autoconf-3460000.tar.gz 存放在Ubuntu 系统的位置路径地址:/mnt/e/github_source_code/sqlite-autoconf-3460000.tar.gz

第二步:解压、编译和库函数拷贝系统库

解压sqlite-autoconf-3460000.tar.gz 并切换至对应的文件夹目录,相关指令如下:

tar -zxvf sqlite-autoconf-3460000.tar.gz


cd sqlite-autoconf-3460000/

创建 sqlite_libaray 文件夹执行,用于指定sqlite3库文件、头文件和可行性命令.

 mkdir sqlite_library

执行编译:

1.首先需要切换回sqlite3  源码文件夹:

wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code$ cd sqlite-autoconf-3460000/

./configure  --prefix=/mnt/e/github_source_code/sqlite_library(--prefix用于指定sqlite库文件、头文件和可行性命令的安装路径)

2.

make                    //进行编译

3.

make install        (把sqlite安装到--prefix指定的目录下)

顺利执行后,在/mnt/e/github_source_code/sqlite_library目录下会出现四个文件夹,即:

- bin         存放sqlite命令文件
- include   存放sqlite的头文件
- lib          存放sqlite库文件,包括静态库和动态库
- share     存放帮助文件等辅助性的文档

第三步:移植
Linux中存放系统库文件的位置usr/lib、usr/include;

当要使用第三方库函数时,将.h和.so .a文件等加入usr/include、usr/lib即可;

执行如下命令:

将sqlite_library 中lib 文件夹中已libsqlite3* 开头的.h和.so 文件拷贝至/usr/lib 文件夹中。

wz2012@LAPTOP-8R0KHL88://$ cd /mnt/e/github_source_code/sqlite_library/
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library$ cd lib
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library/lib$sudo cp libsqlite3* /usr/lib

 将sqlite_library 中lib 文件夹中已libsqlite3* 开头的.h和.so 文件拷贝至/usr/include 文件夹中。


wz2012@LAPTOP-8R0KHL88://$ cd /mnt/e/github_source_code/sqlite_library/
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library$ cd include
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library/include$ sudo cp * /usr/include/

第四步:在Ubuntu 系统中使用C 语言连接sqlite3 数据库/验证

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char *argv[])
{
	sqlite3 *db;
    char *err_msg = 0;

    // 打开数据库连接
    int rc = sqlite3_open("test.db", &db);

    if (rc) {
        fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
        return 1;
    } else {
        fprintf(stderr, "成功打开数据库\n");
    }

    // 创建一个表
    char *sql = "CREATE TABLE IF NOT EXISTS Cars(Id INT, Name TEXT, Price INT)";
    
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);

    if (rc != SQLITE_OK ) {
        fprintf(stderr, "SQL 错误: %s\n", err_msg);
        sqlite3_free(err_msg);
    } else {
        fprintf(stdout, "成功创建表\n");
    }

    // 关闭数据库连接
    sqlite3_close(db);
	return 0;
}

编译命令方式:

第一种:默认链接动态库

gcc sqlite3_demo1.c -o sqlite3_demo1 -lsqlite3

第二种:指定链接动态库

gcc sqlite3_demo1.c -o sqlite3_demo1 -static -lsqlite3 -lpthread -ldl 

控制台结果输出:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code/sqlite3数据库使用$ gcc sqlite3_demo1.c -o sqlite3_demo1 -lsqlite3
wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code/sqlite3数据库使用$ ./sqlite3_demo1
成功打开数据库
成功创建表

;