首页 > 数据库 >SQLite库笔记:下载编译

SQLite库笔记:下载编译

时间:2024-08-02 19:54:33浏览次数:11  
标签:SQLite OMIT sqlite 笔记 编译 build DSQLITE

SQLite是一个C语言库,它实现了一个小型、快速、自包含、高可靠性、全功能的SQL数据库引擎。它广泛应用于计算机、手机和嵌入式设备。SQLite源代码在公有领域(public domain),据SQLite官网介绍说可以免费使用,不需要license。

1. 源码包下载

https://www.sqlite.org/download.html

2. 编译

Ubuntu环境,解压源码包,创建build目录用于存放编译产生的文件。

在build目录下,命令行依次执行如下命令以编译SQLite。其中--prefix参数指定了编译产生文件的存放路径为build目录。CC变量也可以指定其它编译工具链,例如arm-linux-gcc。

../sqlite-autoconf-3460000/configure CC=gcc --prefix=/home/ad/data/code/sqlite/build
make
make install

编译成功后,build目录下产生的文件如下图。

其中,include目录下存放SQLite库的.h头文件,lib目录下存放SQLite的静态库和动态库文件。可以通过cp -rf命令将这两个文件夹拷贝到代码工程中使用。

bin目录下存放生成的二进制可执行文件,可以命令行直接./执行。

3. 编译优化

当内存空间有限,希望缩减库文件大小时,可以使用SQLite官网推荐的编译选项(详情见https://www.sqlite.org/compile.html#untestable)。并加上strip操作,去掉符号和调试信息,尽可能缩减库文件大小。示例如下:

CFLAGS="-Os  -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_USE_ALLOCA" ../sqlite-autoconf-3460000/configure CC=gcc STRIP=strip --prefix=/home/ad/data/code/sqlite/build
make
make install-strip

编译参数太长了,可以写个bash脚本来执行这些命令,脚本内容示例:

#!/bin/sh

make clean
REDUCE_AGS="-Os  -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_USE_ALLOCA"

CFLAGS=$REDUCE_AGS ../sqlite-autoconf-3460000/configure CC=gcc STRIP=strip --prefix=$(pwd)  --disable-readline --disable-editline
make
make install-strip

键入chmod +x命令给build.sh增加执行权限, 然后sh或./执行脚本,即可编译SQLite源码包。

来对比一下,优化编译后库文件从27M缩减到了2.4M字节,缩减了91%。

二进制可执行文件从9.3M缩减到1.3M字节,缩减86%。

其中,strip操作贡献了很大的缩减力度,而SQLite编译选项裁剪了大概200KB。

标签:SQLite,OMIT,sqlite,笔记,编译,build,DSQLITE
From: https://blog.csdn.net/starlight_0/article/details/140748424

相关文章

  • ISC.AI 2024人工智能峰会——个人笔记
    个人记录篇360开放明星场景,邀请国内最强大模型合作名单:零一万物,华为云,科大讯飞,百度,火山引擎,商汤,360,智谱AI,百川智能,腾讯,MiniMax,面壁智能,阿里云,DeepSeek,学而思(九章大模型)。网络安全专项扶持政策上海市普陀区:详情见视频回放“ISC.AI2024上海AI峰会”的28分42秒至47分整。......
  • 【笔记】模板整理以及警钟长鸣
    图论部分\(\text{I}\).连通性部分有向图强连通分量\(\text{(SCC)}\)代码模板#include<bits/stdc++.h>usingnamespacestd;constintN=1e4+5;intn,m,num,scc_cnt,top;boolinstk[N];intdfn[N],low[N],stk[N],blg[N];vector<int>g[N],ans_scc[N],ne......
  • CSAPP笔记:Lecture 02 Bits, Bytes and Integer
    位移操作二进制优势在于容易表示、抗干扰等,在表示模拟信号的时候也有优势。运算符&,|,!&&,||,!!>>,<<:位移运算又分为逻辑位移、算术位移,其中理解算数右移需要理解计算机内如何表示负数.位移实验移动的位数等于int的位数(4bytes*8=32bis),结果不变。如果是3......
  • 在windows上用docker编译ceph
    Why为什么要在windows上跑docker去编译ceph的代码?是松鼠哥吃太饱了吗?当然不是~在实际生产问题处理中,很多时候会遇到棘手的情况,需要快速修改并编译得到可用的二进制程序,例如上篇中,松鼠哥处理多个osd连续的down时,就需要导出其中的一些pg,但是pg的数据导出会因为其中的一些对......
  • SpringCloud入门学习笔记(四)
    Sentinel篇 SpringCloud入门学习笔记(一)-CSDN博客SpringCloud入门学习笔记(二)-CSDN博客SpringCloud入门学习笔记(三)-CSDN博客前言 在互联网应用过程中,有很多的高并发访问场景,类似于双十一这种活动,特点是访问量剧增,访问量超出系统所能处理的最大并发数。 如果没有保护机......
  • SpringCloud入门学习笔记(三)
    Nacos篇SpringCloud入门学习笔记(二)-CSDN博客SpringCloud入门学习笔记(一)-CSDN博客前言  上篇中提到服务消费者要去调用多个服务提供者构成的集群,此时需要一个三方软件来同步更新提供者的地址信息,同时供服务消费者来此处访问地址,为了解决这类问题,就需要引入服务注册组件(功......
  • 022.(附加)chromedriver编译-绕过selenium机器人检测
    有小伙伴说使用selenium没能绕过机器人检测,盘他。一、selenium简介Selenium是一个强大的工具,用于Web浏览器自动化,更常被用于爬虫但selenium需要通过webdriver来驱动chrome,每次运行selenium时,都要先找到对应版本的chromedriver.exe。chromedriver自动化会对浏览器的部分属......
  • 模电笔记——半导体二极管及其基本电路
        tips:本章节的笔记已经打包到word文档里啦,建议大家下载文章顶部资源(手机端下载后里面的插图可能会乱,建议电脑下载,兼容性更好且易于观看),若有不足之处请多多包含,大家可以评论指正或给出建议。    在讲之前先允许我浅谈一下电子技术相关概念与模拟电子系统的......
  • 苍穹外卖项目--学习笔记
    苍穹外卖学习文档软件开发整体介绍软件开发流程需求分析需求规格说明书、产品原型设计UI设计、数据库设计、接口设计编码项目代码、单元测试测试测试用例、测试报告上线运维软件环境安装、配置角色分工项目经理对整体项目负责,任务分配、把控进度产品经理进行......
  • 【C++】学习笔记——智能指针
    文章目录二十一、智能指针1.内存泄漏2.智能指针的使用及原理RAII智能指针的原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用weak_ptr删除器未完待续二十一、智能指针1.内存泄漏在上一章的异常中,我们了解到如果出现了异常,会中断执行流,跳转到catch处。但......