2015-08-31 30 views
0

我想编译一个使用rocksdb的程序。无法编译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的路径与它所在的位置不相关?

+1

您应该为编译器的include路径添加“rocksdb-master/include”。你如何做到这一点取决于编译器。 –

+0

没有'#include“metadata.h”'的原因当然是很多库都有这样的文件。 –

回答

1

通常应该只使用下面的头在你的项目:

#include "rocksdb/db.h" 

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

如何将包含路径添加到编译器标志实际上是编译器特定的。使用g ++或clang,在编译自己的程序时将-I../rocksdb-master/include传递给编译器。请注意,你也需要链接到RocksDB库。

最后,如果您使用某些高级概念,例如,您可能需要包含更多RocksDB标头。交易。