在ubuntu上面实现ARM CPU(335X)的sqlite3交叉编译实践过程
在ubuntu上实现ARM的sqlite3交叉编译实践过程
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
SQLite特点:
不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。。
一、下载sqlite3源码包
sqlite3官方下载地址
这里我下载的是3.37.1版本

二、解压压缩包
#tar -zxvf sqlite-autoconf-3340000.tar.gz
生成makefile
#./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/opt/sqlite3
说明:
./configure生成makefile
CC:arm平台所使用的交叉编译工具,
–host:指定运行环境为arm-linux
prefix:指定安装目录
接着执行以下三命令:
#make clean
#make
#make install
三、编写测试文件
#include <stdio.h>
#include<time.h>
#include <sqlite3.h>
#include<string.h>
//查询的回调函数声明
int select_callback(void * data, int col_count, char ** col_values, char ** col_Name);
int main(int argc, char * argv[])
{
const char * sSQL1 = "create table pic([picId] integer PRIMARY KEY AUTOINCREMENT, [InsertTime] TimeStamp NOT NULL DEFAULT (datetime('now','localtime')), [url] varchar(20));";
char * pErrMsg = 0;
int result = 0;
// 连接数据库
sqlite3 * db = 0;
int ret = sqlite3_open("./test9.db", &db);
if( ret != SQLITE_OK ){
fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db));
return(1);
}
printf("数据库连接成功!\n");
// 执行建表SQL
sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg );
if( ret!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", pErrMsg);
sqlite3_free(pErrMsg);
return 1;
}
printf("建表成功!\n");
// 执行插入记录SQL
//result = sqlite3_exec( db, "insert into pic([url]) values('/c');", 0, 0, &pErrMsg);
int i;
for(i=0;i<5;i++){
if(sqlite3_exec( db, "insert into pic([picId],[url]) values(null,'/c')", 0, 0, &pErrMsg)!= SQLITE_OK){
fprintf(stderr, "insert SQL error: %s\n", pErrMsg);
sqlite3_free(pErrMsg);
printf("插入失败!\n");
}else{
printf("插入数据成功\n");
}
}
// 查询数据表
printf("开始查询数据库内容\n");
//sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg);
if(sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg)!=SQLITE_OK){
fprintf(stderr, "insert SQL error: %s\n", pErrMsg);
}else{
printf("查询成功!\n");
}
// 关闭数据库
sqlite3_close(db);
db = 0;
printf("数据库关闭成功!\n");
return 0;
}
int select_callback(void * data, int col_count, char ** col_values, char ** col_Name)
{
// 每条记录回调一次该函数,有多少条就回调多少次
int i;
for( i=0; i < col_count; i++){
printf( "%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] );
}
return 0;
}
四、编译目标文件
#arm-linux-gnueabihf-gcc sqlitetest.c -o sqlitetest -I/opt/sqlite3/include -L/opt/sqlite3/lib -lsqlite3
五、运行测试用例
需要将/opt/sqlite3/lib拷贝到/lib下(或者加入到环境变量/etc/profile中),/opt/sqlite3/bin拷贝到/bin
浙公网安备 33010602011771号