在Fedora里面安装BerkeleyDB数据库


一、首先到Oracle的官网下载Berkeley db数据库源文件

下载地址http://download.oracle.com/otn/berkeley-db/db-5.3.15.tar.gz

二、下载之后的文件是一个打包好的文件,需要在命令行里面利用tar来解压(当然你也可以利用一些可视化工具来解压),步骤如下

在命令行里面输入 tar -zxvf  db-5.3.15.tar.gz

解压之后进入db-5.3.15目录有以下文件及文件夹

进入build_unix目录

cd build_unix

之后运行../dist/configure

configure工具检查环境之后,并产生编译程序所需要的文件,当它成功运行之后,接着在命令行里面输入

make

当编译结束之后,你需要运行“make install(需要root权限)”,之后库文件和所需要的开发文件将会安装到你的系统中去。

这时安装好的文件将会默认放在系统的/usr/local/BerkeleyDB.5.3目录里面,为了能够在编程环境中利用它,你需要在/etc/ld.so.conf文件中加入/usr/local/BerkeleyDB.5.3/lib,这样你的程序才能正确找到这个库文件,最后运行ldconfig命令更新你的系统。好了,现在你就可以编写DB数据库代码了。

  1. #include <stdio.h>   
  2. #include <db.h>   
  3. #include<string.h>   
  4. #define DATABASE "employees.db"   
  5.   
  6. int main()  
  7. {  
  8.    DBT key, data;  
  9.    DB *dbp;  
  10.    int ret;  
  11.    struct data_struct {  
  12.       int empid;  
  13.       char lastname[50];  
  14.       char firstname[50];  
  15.       float salary;  
  16.    } emp;  
  17.   
  18.    ret = db_create(&dbp, NULL, 0);  
  19.    if (ret != 0)  
  20.    {  
  21.       perror("create");  
  22.       return 1;  
  23.    }  
  24.   
  25.    ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0);  
  26.    if (ret != 0)  
  27.    {  
  28.       perror("open: ");  
  29.       return 1;  
  30.    }  
  31.   
  32.    while(1)  
  33.    {  
  34.       printf("Enter Employee ID: ");  
  35.       scanf("%d", &emp.empid);  
  36.       if (emp.empid == 0)  
  37.          break;  
  38.       printf("Enter Last name: ");  
  39.       scanf("%s", &emp.lastname);  
  40.       printf("Enter First name: ");  
  41.       scanf("%s", &emp.firstname);  
  42.       printf("Enter Salary: ");  
  43.       scanf("%f", &emp.salary);  
  44.   
  45.       memset(&key, 0, sizeof(DBT));  
  46.       memset(&data, 0, sizeof(DBT));  
  47.   
  48.       key.data = &(emp.empid);  
  49.       key.size = sizeof(emp.empid);  
  50.       data.data = &emp;  
  51.       data.size = sizeof(emp);  
  52.   
  53.       ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);  
  54.       if (ret != 0)  
  55.       {  
  56.          printf("Employee ID exists\n");  
  57.       }  
  58.    }  
  59.   
  60.    dbp->close(dbp, 0);  
  61.    return 0;  
  62. }  

编译代码

gcc -I/usr/local/BerkeleyDB.5.3/include -o newemployee newemployee.c -L/usr/local/BerkeleyDB.5.3 -ldb

按照上面的编译将会出现一个错误

/usr/bin/ld: cannot find -ldb

collect2: ld 返回 1

这时在命令行里面输入下面的语言问题就可以解决

ln -s /usr/local/BerkeleyDB.5.3/lib/libdb.so /usr/lib/libdb.so

再编译

gcc -I/usr/local/BerkeleyDB.5.3/include -o newemployee newemployee.c -L/usr/local/BerkeleyDB.5.3 -ldb

好了,最后代码编译成功。

相关内容