0

我正在尝试编译一个使用rocksdb的程序。

根据官方网页中的示例,我应该添加到代码中的唯一标头是 db.h。

现在,我正在编译的文件在文件夹 A 中。db.h 但是在 A/rocksdb-master/include/rocksdb/ 中。

所以,我将此行添加到我的文件中:

#include "rocksdb-master/include/rocksdb"

它找到了文件,但问题是在 db.h 中,我有这一行:

#include "rocksdb/metadata.h"

当我编译我得到这个错误:

致命错误:rocksdb/metadata.h:没有这样的文件或目录#include“rocksdb/metadata.h”

我的意思是,这很明显。db.h 与 metadata.h 位于同一文件夹中,因此编译器找不到任何 Rocksdb 文件夹也没关系。但我怀疑写这个库的人不知道这一点。

有没有其他方法可以添加路径来编译它?为什么 db.h 的路径与它所在的位置无关?

4

1 回答 1

3

您通常应该在项目中仅使用以下标头:

#include "rocksdb/db.h"

在编译您自己的项目时,您应该将 RocksDB 包含路径添加到包含目录列表中。例如,如果 RocksDB 源代码在 directory 中../rocksdb-master,则包含路径将为../rocksdb-master/include.

如何将包含路径添加到编译器标志确实是特定于编译器的。使用 g++ 或 clang,它是通过-I../rocksdb-master/include在编译您自己的程序时传递给编译器来完成的。请注意,您还需要链接 RocksDB 库。

最后,如果您使用 RocksDB 的一些高级概念(例如事务),您可能需要包含更多的 RocksDB 标头。

于 2015-09-22T10:16:39.290 回答