开发者社区> 问答> 正文

在 Linux 上安装及配置 BerkeleyDB : 配置报错 

  1. 首先从其oracle公司官网http://www.oracle.com/technology/software/products/berkeley- db/index.html获得其安装包,当前版本为4.8 #tar zxfv db-4.x.tgz #cd db-4.x/build_unix #../dist/configure 注意这里,必须进入解压后的目录下的 build_unix 目录,然后再执行 ../dist/configure ,否则出错。
  2. 编译 #make #make install
  3. 配置(非常重要) #vi /etc/ld.so.conf (并将berkeleyDB的lib路径加到该文件的最后一行,本例中是/usr/local/BerkeleyDB.4.8/lib,这样才能找到并加载它的库文件.ld.so.conf是系统动态链接库的配置文件.此文件内,存放着可被LINUX共享的动态链接库所在目录的名字 (系统目录/lib,/usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔.) #ldconfig
  4. 测试 编辑 test.c 文件如下:
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//only this head should include for use bdb.
#include <db.h>
#define DATABASE "free.db"
#define DBLOCAT "/home/free/code/cc++/new"

int main()
{
    DB_ENV *myEnv;
    DB *dbp;
    DBT key, data;
    int ret,t_ret;
    u_int32_t env_flags;
    //........... Create an environment object and initialize it for error reporting
    ret = db_env_create(&myEnv, 0);
    if (ret != 0)
    {
        fprintf(stderr, "Error creating env handle: %s\n", db_strerror(ret));
        return -1;
    }
    //........If the environment does not exist create it. Initialize the in-memory cache.
    env_flags = DB_CREATE | DB_INIT_MPOOL;
    //........Open the environment.
    ret = myEnv->open(myEnv,DBLOCAT,env_flags,0);
    if (ret != 0)
    {
        fprintf(stderr, "Environment open failed: %s", db_strerror(ret));
        return -1;
    }

    if ((ret = db_create(&dbp, myEnv, 0)) != 0)
    {
        fprintf(stderr, "db_create: %s\n", db_strerror(ret));
        exit (1);
    }

    if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0)
    {
        dbp->err(dbp, ret, "%s", DATABASE);
        exit (1);
    }
    memset(&key, 0, sizeof(key));
    memset(&data, 0, sizeof(data)); key.data = "sport";
    key.size = sizeof("sport");
    data.data = "football";
    data.size = sizeof("football");
    /*
    //......put data
    if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0)
    {
        printf("db: %s: key stored.\n", (char *)key.data);
    }
    else
    {
        dbp->err(dbp, ret, "DB->put");
    }
    */

    //........put data NOOVERWRITE
    if ((ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == 0)
        printf("db: %s: key stored.\n", (char *)key.data);
    else
        dbp->err(dbp, ret, "DB->put");

    //.......get data
    if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
        printf("db: %s: key retrieved: data was %s.\n", (char *)key.data, (char *)data.data);
    else
        dbp->err(dbp, ret, "DB->get");
     //......del data
    if((ret = dbp->del(dbp, NULL, &key, 0)) == 0)
        printf("db: %s: key was deleted.\n", (char *)key.data);
    else
        dbp->err(dbp, ret, "DB->del");
    //.........close, only when the db successful closed,the data can real write to the disk.
    //if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
    //ret = t_ret;
    //exit(ret);
    if (dbp != NULL)
        dbp->close(dbp, 0);
    //.........close evn
    //........When you are done with an environment, you must close it.
    //........Before you close an environment, make sure you close any opened databases
    if (myEnv != NULL)
        myEnv->close(myEnv, 0);
     return 0;

}

编译方法(源文件为test.c): #gcc test.c -ggdb -I/usr/local/BerkeleyDB.4.8/include/ -L/usr/local/BerkeleyDB.4.8/lib/ -ldb -lpthread -o test.out

展开
收起
kun坤 2020-06-03 15:46:47 659 0
1 条回答
写回答
取消 提交回答
  • [root @localhost ~]# gcc test.c -ggdb -I/usr/local/BerkeleyDB.4.8/include/ -L/usr/local/BerkeleyDB.4.8/lib/ -ldb -lpthread -o test.out

    [root @localhost ~]# ./test.out

    db: sport: key stored.

    db: sport: key retrieved: data was football.

    db: sport: key was deleted.

    ######我是在安装openLDAP时才装BDB的,如有相同需求的同学,友情提示一下,特定版本的openLDAP只与特定的BDB兼容,具体需要看README文档,否则。。。很纠结。

    2020-06-04 10:55:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载