本文包含 SQLite3
的介绍、移植过程、注意事项和使用方式。
SQLite3
SQLite3 是一个开源的嵌入式关系数据库,我们可以将其嵌入到我们的应用程序中,从而实现对数据的管理。SQLite3 的源代码可以从 SQLite3 官网 下载。
以下内容仅为对我所做项目移植的记录,详细内容请参考 SQLite3 官方文档。
SQLite3 移植
- 获取源码 https://www.sqlite.org/index.html
- 解压源码
1
2tar xvf sqlite-autoconf-3340000.tar.gz
cd sqlite-autoconf-3340000 - 配置生成 Makefile
1
./configure --host=arm-linux-gnueabihf --prefix=${PWD}/install
- make 编译
1
make
- make install 安装
1
make install
- 将
install
目录下文件和主目录下sqlite3
下文件进行移植到开发板根文件系统1
2cp install/bin/sqlite3 /home/ming/rootfs/bin
cp lib/libsqlite3.so.0.8.6 /home/ming/rootfs/lib - 对
libsqlite3.so.0.8.6
创建符号链接1
2cd /home/ming/rootfs/lib
ln -s libsqlite3.so.0.8.6 libsqlite3.so.0
SQLite3 注意
- 实际开发中移植工作尽量在 root 用户下进行
- 类库移植首先要拿到源码 和 所依赖的库或源码
- 确定类库运行的硬件平台 (X86架构 或 ARM架构),可以确定编译器的类型
- 修改Makefile 编译器(匹配硬件平台)
- 明确类库的调用方法(如何包含头文件 和 链接类库)
在开发中 移植库的工作尽量在 root 用户下移植。因为操作资源是不单单是权限问题
SQLite3 类库使用
参考手册对 sqlite3
源码进行了编译 sqlite3
要运行在 157a 平台上(ARM 架构),所以我们需要修改 Makefile
对应的编译器
1 | ./configure --host arm-linux-gnueabi --prefix ./install |
污染交叉编译器 (不推荐)
- 将
install/include
目录下的所有.h
文件拷贝到toolchain/gcc-7.5.0/arm-linux-gnueabihf/include
下,此操作解决包含头文件的问题1
2cd install/include
sudo cp *.h toolchain/gcc-7.5.0/arm-linux-gnueabihf/include -arf - 将
install/lib/libsqlite3.*
所有文件拷贝到toolchain/gcc-7.5.0/arm-linux-gnueabihf/lib
下后,此操作解决的是使用1
2cd install/lib
cp libsqlite3.* ~/toolchain/gcc-7.5.0/arm-linux-gnueabihf/lib -arfsqlite3
时链接库的问题arm-linux-gnueabihf-gcc xxx.c -o xxx -lsqlite3
之所以将头文件和编译生成的库文件拷贝到交叉编译器对应的路径下能够解决问题,是因为交叉编译器的预处理包含头文件的路径在交叉编译器中链接器链接的路径也在交叉编译器中
添加环境变量
依据 pkgconfig
目录下的 sqlite3.pc
文件内容进行链接使用
- 打开
bash.bashrc
文件1
vim /etc/bash.bashrc
- 添加环境变量
PKG_CONFIG_PATH
1
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/ming/sqlite-autoconf-3340000/install/lib/pkgconfig/
- 使环境变量生效
1
source /etc/bash.bashrc
- 编译源码链接操作
1
arm-linux-gnueabihf-gcc server.c -o server `pkg-config --cflags --libs sqlite3`