gpt4 book ai didi

c - 我如何在 FreeBSD 9.1 系统中使用 libdb-4.2?

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:57 32 4
gpt4 key购买 nike

我正在尝试用 C 编写一个小程序,它将在 FreeBSD 9.1 系统上打开并从 Berkeley 4.2 哈希 DB 中读取以进行测试,但我无法编译它。这是我第一次用 C 语言编写任何东西并从命令行编译,所以我可能遗漏了一件能让它正常工作的东西,我不知道。

在全面搜索并查看 github 上的文档和源代码之后,这就是我目前所得到的:

#include <sys/types.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <unistd.h>

#include <db.h>

int main()
{
DB * mydb;
u_int32_t open_flags = DB_RDONLY;
int ret;

ret = db_create(&mydb, NULL, 0);
if (ret != 0) {
printf("Error creating DB structure!");
return 1;
}

ret = mydb->open(mydb, NULL, "bsddb-py", NULL, DB_HASH, open_flags, 0);
if (ret != 0) {
printf("Error opening DB file!");
return 2;
}

mydb->close(mydb, 0);
}

我用这个编译:

cc -ldb-4.2 db_test.c

得到这个:

db_test.c: In function 'main':
db_test.c:20: error: 'DB_RDONLY' undeclared (first use in this function)
db_test.c:20: error: (Each undeclared identifier is reported only once
db_test.c:20: error: for each function it appears in.)
db_test.c:29: error: 'DB' has no member named 'open'
db_test.c:35: error: too many arguments to function 'mydb->close'

显然编译器挂断了使用 Berkeley 1.85(dbopen 等)并且它不会让步?

最佳答案

看起来像#include <db.h>将为 Berkeley 1.85 提供一个接口(interface),因为这是在 FreeBSD 上默认安装的。我们通过端口安装了 Berkeley 4.2,为了避免冲突,与 4.2 接口(interface)的 header 放在其他地方 - 我引用了正确的库而不是正确的 header 。

因此,我将包含更改为:

#include <db42/db.h>

...并用...编译

cc -I/usr/local/include/ -L/usr/local/lib/ -ldb-4.2 db_test.c -o db_test

运行上述修改后的源代码没有产生可见的输出,这意味着它有效!

作为新手,BSD 很奇怪。

关于c - 我如何在 FreeBSD 9.1 系统中使用 libdb-4.2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550539/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com