c++ - 无法编译 rocksdb,找不到依赖项

标签 c++ dependencies rocksdb

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

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

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

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

#include "rocksdb-master/include/rocksdb"

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

#include "rocksdb/metadata.h"

当我编译时出现这个错误:

fatal error :rocksdb/metadata.h: 没有那个文件或目录 #include "rocksdb/metadata.h"

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

有没有其他方法可以添加编译路径? 为什么 db.h 的路径不是相对于它所在的位置?

最佳答案

您通常应该在您的项目中使用以下 header :

#include "rocksdb/db.h"

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

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

最后,如果您使用它的一些高级概念,例如,您可能需要包含更多 RocksDB header 。交易。

关于c++ - 无法编译 rocksdb,找不到依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320277/

相关文章:

c++ - 放气压缩规范说明

makefile - ARM GNU Makefile 文件夹依赖时间戳问题

c++ - Visual Studio DLL 依赖项导致不必要的重新链接

apache-kafka - 为什么 kafka 流状态目录在/tmp/kafka-streams 中?

rocksdb - 多个rocksdb实例

c++ - memcpy 和单个数据字的赋值语句有什么区别?

c++ - 为什么选择复制构造函数而不是 move 构造函数

android - 覆盖 init() 方法,Cocos2d-x v2.2

c++ - 析构函数调用

java - 解决 JRuby 的 Java 依赖关系