Linux上源码安装sqlite3(图文并茂)
文章目录
此次安装是在securetCRT上进行的,由于没有sudo权限,所以只能尝试源码安装(有sudo权限何必要如此麻烦,害)
1-下载
官网:https://www.sqlite.org/download.html
2-上传到secureCRT
虚拟机的话参考:虚拟机实现文件传输
下载之后是在自己的windows电脑上的,但是需要上传到Linux上,所以就需要 rz 命令将文件上传:如果是想要上传文件的话就是命令 sz
点击添加,然后点击上传即可
上传下载的位置在如下图所示,主要针对的是windows的位置
3-解压缩
执行命令tar -zxvf 压缩包(输入首字母然后按Tab间自动补全)
4-执行./configure --prefix=文件名命令
先 cd 进入刚解压的文件夹,然后执行配置命令,生成编译文件 ./configure --prefix=指定的文件夹名称
自己遇到的问题:因为自己没有权限,所以参考其他资料的时候讲sqlite3建在了/home目录下,后面就没有权限,所以尽量pwd看看自己的位置然后创建文件夹
如果不行直接执行:
./configure --prefix=`pwd`/../install --disable-static
这是一个在 Linux 系统下常用的配置编译工具 configure 的命令,其中的参数含义如下:
- –prefix=:指定安装目录。
- pwd/…/install`:指定安装目录为当前目录的上一级目录中的 install 文件夹。
- –disable-static:禁用静态库的编译。
5-执行make命令编译
可以在make之前执行以下make clean,防止之前安装过,出现错误(这个过程比较久):make clean;make
等到回到命令行就表示成功
遇到的问题:
前一天晚上执行了好几个小时还没行,后面才知道secureCRT连接之后不动会自动断开连接,在options中可以设置。将NO-OP协议打开,然后将后面的值设置100以内比较好(秒为单位)
6-make install + 前面新建文件夹路径
前面在/home/iot12/wangdengtao/下创建的sqlite3,所以这里直接添加命令就可。
会看见新建的sqlite3下有四个文件夹
7-复制文件到相关目录(有sudo权限操作)
主要是编译程序的时候系统会默认到/usr/include/下去寻找,所以我们需要将刚才下载的头文件以及动态库静态库都包含过去,因为我没有sudo权限,是不能copy过去的,但是学习动态库静态库之后可以直接在编译时候加上命令行参数就可以直接编译,不需要系统默认去这个路径下。这个第七个过程是有sudo权限的人能做的,copy过去就能用了。没有权限的直接跳到 8
将sqlite3/include/下的所有文件都复制到/usr/include/下去
将sqlite3/lib下的所有文件都复制到/usr/lib/下去
8-直接用命令行参数指定路径编译(没有sudo权限操作)
但是还是遇到了问题:因为没有权限,所以我们在cp的时候是不能copy到相关目录下的。这也是上面留下来的一个个难题,困扰很久。
了解之后,不用系统默认到相关路径下去寻找,我们来充当指路人来自己定路径就可
(1)随便创建一个关于sqlite3的c文件,然后编译,会出现找不到头文件的现象:
(2)你去找你前面下载路径下的sqlite3中有四个文件夹,头文件在/sqlite3/include中,因为我编译的文件和sqlite3所在的文件夹在一个路径,所以只需要 -I(大写的ai) 加上头文件的路径即可
gcc -I(大写的ai)指定路径
(3)但是你会发现又出现了新的问题,找不到函数定义以及链接出现问题,这个不是代码本身的错误,所以找外部错误。
然后去四个文件夹/lib下会发现这些文件,以so结尾的就是动态库,.a结尾的静态库,所以编译的时候要指定系统到这儿来寻找动或者静态库,因为函数原型都在里面,不懂可以参考gcc编译过程最后的链接
-l(小写的aier sqlite3(去掉前面的lib后后面的后缀) -L 路径
成功
不了解动态库静态库的可以再去学习一下来了解比较简单,当时是因为不了解动静态库所以很迷惑,弄懂之后就好理解了。
9-最后怎么解决命令行sqlite3不能执行的问题
意思是:找不到执行文件或者命令脚本的路径。
通常,command not found是系统不能找到执行命令的路径引起的。所以需要修改环境变量修改,修改环境变量即可。当然你又权限的话可以直接将sqlite3命令copy到系统文件路径上面去。
可以看到我们的sqlite3命令安装在了这个路径下:(pwd查看当前路径)
vim ~/.bashrc
添加:
保存退出之后执行:source ~/.bashrc
即可执行: