OpenWrt 自学笔记(4)------交叉编译SQLite3

来源:互联网 发布:android 无法修改mac 编辑:程序博客网 时间:2024/06/18 06:11
1.配置下载SQLite3

  Utilities----->
       database------>
          sqlite2-cli............ SQLite (v3.x)database engine (cli)



openwrt系统选着编译libpthread进去,以支持线程库

 Basesystem ------->
       <*>libthread……………………POSIX thread library

如果默认选项不是自己需要的数据库版本

*************************************************************************************************************************

2、修改支持sqlite3,vim feeds/packages/libs/sqlite3/Makefile


  将版本号修改为sqlite3和编译之后拷贝的库的名字

      PKG_NAME:=sqlite3

      PKG_VERSION:=3.6.17

      PKG_RELEASE:=3

下载新版本的openwrt 可以不修改,也不建议修改

*******************************************************************************************************************************

2.编译安装mips库

进入源码文件解压SQLite3,进入到该目录执行

./configure --host=mips-openwrt-linux --prefix=/home/linux64/openwrt/openwrt/dl/sqlite-autoconf-3081101/sqlite_mips

make

sudo make install 

可以看到生成一个sqlite_mips文件夹内容如下


其中include 为相应头文件,lib为相应库文件


3.编译SQLite程序 
我用C语言封装了SQLite3的程序如下
#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>

int callback(void *p,int n,char **f_value,char **f_name)//n代表了表中的列数 f_value
{
    int i;
    if(*(int *)p == 1)
    {
        for(i = 0;i < n;i ++)
        {
            printf("%s\t",f_name[i]);
        }
        printf("\n");
        *(int *)p = 0;
    }
    for(i = 0;i < n;i ++)
    {
        printf("%s\t",f_value[i]);
    }
    printf("\n");
    return 0;
}

int main(int argc, const char *argv[])
{
    sqlite3 *db;
    char *errmsg;
    if(sqlite3_open("./my.db",&db) != SQLITE_OK)
    {
        puts(sqlite3_errmsg(db));
        exit(1);
    }

    char sqlopt[64];
    sprintf(sqlopt,"create table stu(name,id);");
    if(sqlite3_exec(db,sqlopt,NULL,NULL,&errmsg) != SQLITE_OK)
    {
        puts(errmsg);
        exit(1);
    }
#if 0
    sprintf(sqlopt,"insert into stu values('lxs',1000);");
    if(sqlite3_exec(db,sqlopt,NULL,NULL,&errmsg) != SQLITE_OK)
    {
        puts(errmsg);
        exit(1);
    }
#endif 

    char name[15];
    int id;
    int i;

    for(i = 0;i < 2;i ++)
    {
        printf("请输入数据:");
        scanf("%s%d",name,&id);

        sprintf(sqlopt,"insert into stu values('%s',%d);",name,id);
        sqlite3_exec(db,sqlopt,NULL,NULL,&errmsg);

    }

    int a = 1;
    sprintf(sqlopt,"select * from stu;");
    if(sqlite3_exec(db,sqlopt,callback,&a,&errmsg) != SQLITE_OK)
    {
        puts(errmsg);
        exit(1);
    }

    char **val;// char *val[];
    int r;
    int c;
    sprintf(sqlopt,"select * from stu;");
    if(sqlite3_get_table(db,sqlopt,&val,&r,&c,&errmsg) != SQLITE_OK)
        //r代表数据的行数,c代表列数
    {
        puts(errmsg);
        exit(1);
    }

    for(i = 0;i < c;i ++)
    {
        printf("%s\t",val[i]);
    }
    printf("\n");
    int count = 0;
    for(i = c;i < (r + 1) * c;i ++)
    {
        printf("%s\t",val[i]);
        count ++;
        if(count % c == 0)
            printf("\n");
    }
    return 0;
}


编译该程序
mips-openwrt-linux-gcc sqlite.c -lsqlite3 -I ../sqlite_mips/include/ -L ../sqlite_mips/lib/ -lsqlite3
-I :是指定刚才生成的头文件 -L 是生成的库文件即.so文件 格式为mips

4.拷贝到路由器运行如下
root@OpenWrt:/# ./a.out 

可以看到生成了my.db

0 0
原创粉丝点击