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
成功打开数据库
成功创建表
相关推荐
低客的黑调1 天前
Redis-不止是缓存
java·开发语言·数据库
2501_914245931 天前
AWS CodeBuild 中 PHP 8.0 运行时版本不支持的解决方案
jvm·数据库·python
2301_813599551 天前
如何监控表空间自动扩展_DBA_DATA_FILES中的MAXBYTES分析
jvm·数据库·python
我不听你讲话1 天前
Redis 配置与优化核心内容总结
数据库·redis·缓存
生万千欢喜心1 天前
linux 安装 人大金仓数据库
linux·运维·数据库
m0_716430071 天前
mysql数据库表名区分大小写吗_通过lower case table names配置
jvm·数据库·python
Wy_编程1 天前
redis 客户端编程
数据库·redis·缓存
傻啦嘿哟1 天前
Python多进程编程:用multiprocessing突破GIL限制
服务器·网络·数据库
看我干嘛!1 天前
mysql主从配置一主一从
数据库·mysql
@insist1231 天前
网络工程师-网络规划与设计(三):数据中心机房设计规范全解析
服务器·网络·数据库·网络工程师·软考·软件水平考试