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
成功打开数据库
成功创建表
相关推荐
睡觉的时候不会困5 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂7 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程7 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
JAVA不会写7 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)7 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea8 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~9 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员9 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly219 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql
不宕机的小马达10 小时前
【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用
数据库·mysql