DB3 problem
Stephan Möck
s.moeck at gmx.de
Mon Apr 7 15:10:55 PDT 2003
I have just installed DB3 and I want to compile an example programm from the
examples_c directory. The compilation stops with errors.
gcc -o dbtest ex_access.c
/var/tmp//ccdld6iZ.o: In function `ex_access':
/var/tmp//ccdld6iZ.o(.text+0x5b): undefined reference to `db_create'
/var/tmp//ccdld6iZ.o(.text+0x72): undefined reference to `db_strerror'
/var/tmp//ccdld6iZ.o(.text+0x444): undefined reference to `db_strerror'
Does anybody no what's the problem is?
###############################################################
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
//#include <db.h>
#include </usr/local/include/db3/db.h>
//#include <db.h>
#ifdef HAVE_VXWORKS
#include "stdio.h"
#define ERROR_RETURN ERROR
#else
#define DATABASE "access.db"
#define ERROR_RETURN 1
int main __P((void));
#endif
int ex_access __P((void));
#ifndef HAVE_VXWORKS
int
main()
{
return (ex_access() == ERROR_RETURN ? EXIT_FAILURE : EXIT_SUCCESS);
}
#endif
int
ex_access()
{
DB *dbp;
DBC *dbcp;
DBT key, data;
u_int32_t len;
int ret;
char *p, *t, buf[1024], rbuf[1024];
const char *progname = "ex_access"; /* Program name. */
/* Remove the previous database. */
(void)remove(DATABASE);
/* Create and initialize database object, open the database. */
if ((ret = db_create(&dbp, NULL, 0)) != 0)
{
fprintf(stderr, "%s: db_create: %s\n", progname, db_strerror(ret));
return (ERROR_RETURN);
}
dbp->set_errfile(dbp, stderr);
dbp->set_errpfx(dbp, progname);
if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {
dbp->err(dbp, ret, "set_pagesize");
goto err1;
}
if ((ret = dbp->set_cachesize(dbp, 0, 32 * 1024, 0)) != 0) {
dbp->err(dbp, ret, "set_cachesize");
goto err1;
}
if ((ret = dbp->open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0)
{
dbp->err(dbp, ret, "%s: open", DATABASE);
goto err1;
}
/*
* Insert records into the database, where the key is the user
* input and the data is the user input in reverse order.
*/
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
for (;;) {
printf("input> ");
fflush(stdout);
if (fgets(buf, sizeof(buf), stdin) == NULL)
break;
if ((len = strlen(buf)) <= 1)
continue;
for (t = rbuf, p = buf + (len - 2); p >= buf;)
*t++ = *p--;
*t++ = '\0';
key.data = buf;
data.data = rbuf;
data.size = key.size = len - 1;
switch (ret =
dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {
case 0:
break;
default:
dbp->err(dbp, ret, "DB->put");
if (ret != DB_KEYEXIST)
goto err1;
break;
}
}
printf("\n");
/* Acquire a cursor for the database. */
if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
dbp->err(dbp, ret, "DB->cursor");
goto err1;
}
/* Initialize the key/data pair so the flags aren't set. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
/* Walk through the database and print out the key/data pairs. */
while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)
printf("%.*s : %.*s\n",(int)key.size, (char *)key.data, (int)data.size,
(char *)data.data);
if (ret != DB_NOTFOUND)
{
dbp->err(dbp, ret, "DBcursor->get");
goto err2;
}
/* Close everything down. */
if ((ret = dbcp->c_close(dbcp)) != 0) {
dbp->err(dbp, ret, "DBcursor->close");
goto err1;
}
if ((ret = dbp->close(dbp, 0)) != 0) {
fprintf(stderr, "%s: DB->close: %s\n", progname, db_strerror(ret));
return (ERROR_RETURN);
}
return (0);
err2: (void)dbcp->c_close(dbcp);
err1: (void)dbp->close(dbp, 0);
return (ERROR_RETURN);
}
#########################################################
More information about the freebsd-current
mailing list