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