移植Berkeley DB 5.1.19到S3C2440小记

1) 解压缩db-5.1.19.tar.gz

2) 在解压出来的目录db-5.1.19下新建一个目录build_arm

3) 进入build_arm目录

    ../dist/configure --prefix=你要安装BDB的目录 --host=arm-linux

    make

    make install

4) 把make install的bin/ include/ lib/三个目录拷贝到2440开发板文件系统的/usr/local/BerkeleyDB.5.1目录下

5) 把make install的lib/目录下的文件拷贝到2440开发板文件系统的/lib目录下

6) 编写测试代码如下:

#include <db.h>
#include <string.h>
#include <stdlib.h>

#define DATABASE "Embedded_DB.db"
#define GET_DESCRIPTION_SIZE 199

int main( void )
{
    DB *dbp; //DB structure handle

    u_int32_t flags; //database open flags
    int ret_open; //database open function return value

    ret_open = db_create( &dbp, NULL, 0 ); //Initialize a DB handle
    if( 0 != ret_open ){
        fprintf( stderr, "db_create:%s/n", db_strerror(ret_open) );
        exit( 1 );
    }
   
    flags = DB_CREATE; //If the database does not exist, create it
   
    //Use DB handle's open() method
    ret_open = dbp->open( dbp, //DB structure pointer
             NULL, //Transaction pointer
             DATABASE, //On-disk file that holds the database
             NULL, //Optional logical access method
             DB_BTREE, //Database access method
             flags, //Open flags
             0 ); //File mode(using defualts)
    if( 0 != ret_open ){
        dbp->err( dbp, ret_open, "%s", DATABASE );
        exit( 1 );
    }
    else
        printf( "db:%s was created!/n", DATABASE );
   

    //Writting Records to the Database
    DBT put_key,put_data;
    int ret_put;

    //Zero out the DBTs before using them
    memset( &put_key, 0, sizeof(DBT) );
    memset( &put_data, 0, sizeof(DBT) );
   
    put_key.data = "sport";
    put_key.size = sizeof( "sport" );
    put_data.data = "basketball,football and baseball";
    put_data.size = sizeof( "basketball,football and baseball" ) + 1;
   
    ret_put = dbp->put( dbp, NULL, &put_key, &put_data, DB_NOOVERWRITE );
    if( 0  == ret_put )
        printf( "db:%s:key was stored./n", (char *)put_key.data );
    else
        dbp->err( dbp, ret_put, "DB->put()" );

   
    //Getting Records from the Database
    DBT get_key,get_data;
    int ret_get;
   
    memset( &get_key, 0, sizeof(DBT) );
    memset( &get_data, 0, sizeof(DBT) );

    get_key.data = "sport";
    get_key.size = sizeof( "sport" );

    ret_get = dbp->get( dbp, NULL, &get_key, &get_data, 0 );   
    if( ret_get == 0 )
        printf( "db:%s:key was retrieved:data was %s./n", (char *)get_key.data, (char *)get_data.data );
    else
        dbp->err( dbp, ret_get, "DB->get()" );
   

    //Deleting Records
    DBT del_key;
    int ret_del;

    memset( &del_key, 0, sizeof( DBT ) );
   
    del_key.data = "sport";
    del_key.size = sizeof( "sport" );

    ret_del = dbp->del( dbp, NULL, &del_key, 0 );
    if( ret_del == 0 )
        printf( "db:%s:key was deleted./n", (char *)del_key.data );
    else
        dbp->err( dbp, ret_del, "DB->del()");

    //identify the deleting function
    ret_get = dbp->get( dbp, NULL, &get_key, &get_data, 0 );
        if( ret_get == 0 )
                printf( "db:%s:key was retrieved:data was %s./n", (char *)get_key.data, (char *)get_data.data );
        else
                dbp->err( dbp, ret_get, "DB->get()" );
   
    //Closing Database
    int ret_close;
   
    ret_close = dbp->close( dbp, 0 );
    #if 1
    if( ret_close == 0 )
        printf( "db:%s was closed./n", DATABASE );
    else
        dbp->err( dbp, ret_close, "DB->close()" );
    #endif
   
    return 0;         
}

7) 编写Makefile如下:

db_main:db_main.c
    arm-linux-gcc db_main.c -o db_main -I/home/syl/Berkeley_DB/include -L/home/syl/Berkeley_DB/lib -ldb
clean:
    rm *.db db_main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值