Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4012103
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类: 数据库开发技术

2008-03-15 16:23:49

下载了个 Berkeley DB, 在google上查询的可以上这下载:

早晨起来按照代码中给的实例来调式自己本身带的"db-4.5.20/examples_c/getting_started"实例, 自己写了个简单Makefile编译通过了, 什么问题也没有, 但运行起来出问题了. 段错误, 自己用gdb调式了一下发现出错的地方是:
gettingstarted_common.c文件中的:
   ret = dbp->open(dbp,        /* Pointer to the database */
                    NULL,       /* Txn pointer */
                    file_name,  /* File name */
                    NULL,       /* Logical db name */
                    DB_BTREE,   /* Database type (using btree) */
                    open_flags, /* Open flags */
                    0);         /* File mode. Using defaults */

出现段错误的, 怎么找也不知道为什么错误了. 后来听说可以不用安装Berkeley DB就可以使用Berkeley DB的, 所以自己就把源文件中的库给从新复制到一个新的地方, 头文件也给复制到新地方, 再编译. 后来一想db.h是直接写成:
#include 的, 那么gcc编译的时候就应该上"/usr/include/"中找头文件的啊, 如是重新修改为: #include "db.h", 让gcc上我指定的地方找头文件, 一编译OK了, 运行过去了.

什么原因:
[gan@localhost include]$ ls -l db.h
lrwxrwxrwx  1 root root 8 2007-06-02  db.h -> db4/db.h
[gan@localhost include]$ uname -a
Linux localhost.localdomain 2.6.9-34.EL #1 Fri Feb 24 16:44:51 EST 2006 i686 i686 i386 GNU/Linux

原来自己机器上早就安装了BDB了, 但两个版本不一样, 我原来错误的时候是因为:
    编译的头文件是"Sleepycat Software: Berkeley DB 4.2.52: (December 11, 2004)"的头文件, 但连接使用的库是"Berkeley DB 4.5.20: (September 20, 2006)", 这些信息可以上db.h中看到的.

自己写的简单Makefile: (用来编译db-4.5.20/examples_c/getting_started下的文件用的)

DBLIB = ${HOME}/src/bdb/libs/libdb.a
INC= ${HOME}/src/bdb/include

all: bdb_load bdb_read

bdb_load: example_database_load.o gettingstarted_common.o ${DBLIB}
        gcc -g -o $@ example_database_load.o gettingstarted_common.o -I${INC} ${DBLIB} -lpthread

bdb_read: example_database_read.o gettingstarted_common.o ${DBLIB}
        gcc -g -o $@ example_database_read.o gettingstarted_common.o -I${INC} ${DBLIB} -lpthread

example_database_read.o: example_database_read.c
        gcc -c -g $< -I${INC}

example_database_load.o: example_database_load.c
        gcc -c -g $< -I${INC}

gettingstarted_common.o: gettingstarted_common.c
        gcc -c -g $< -I${INC}

clean:
        rm -f *.o
        rm -f load

阅读(2199) | 评论(0) | 转发(0) |
0

上一篇:BDB学习

下一篇:Berkeley DB实践2

给主人留下些什么吧!~~