下载了个 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
|
阅读(2191) | 评论(0) | 转发(0) |