我正在尝试编译使用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位于同一文件夹中,因此编译器找不到任何rockdb文件夹是可以的。但是我怀疑写这个库的人不知道这一点。

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

最佳答案

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

#include "rocksdb/db.h"


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

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

最后,如果您使用某些RocksDB标头的高级概念,例如,交易。

09-26 02:54