Не могу скомпилировать rockdb, зависимости не найдены

Я пытаюсь скомпилировать программу, использующую rockdb.

Согласно примеру на официальной веб-странице, единственный заголовок, который я должен добавить в свой код, — это 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 не относится к тому месту, где он находится?


person user3013172    schedule 31.08.2015    source источник
comment
Вероятно, вам следует добавить rockdb-master/include в путь включения вашего компилятора. Как вы это сделаете, зависит от компилятора.   -  person Bo Persson    schedule 01.09.2015
comment
Причина отсутствия только #include "metadata.h", конечно же, в том, что такой файл есть во многих библиотеках.   -  person Bo Persson    schedule 01.09.2015


Ответы (1)


Обычно вы должны использовать только следующий заголовок в своем проекте:

#include "rocksdb/db.h"

При компиляции собственного проекта вам следует добавить путь включения RocksDB в список включаемых каталогов. Например, если исходный код RocksDB находится в каталоге ../rocksdb-master, путь включения будет ../rocksdb-master/include.

Как добавить путь включения к флагам компилятора, действительно зависит от компилятора. В g++ или clang это делается путем передачи -I../rocksdb-master/include компилятору при компиляции вашей собственной программы. Обратите внимание, что многим вам также необходимо ссылаться на библиотеку RocksDB.

И, наконец, вам может понадобиться включить еще несколько заголовков RocksDB, если вы используете некоторые из его передовых концепций, например. транзакции.

person stj    schedule 22.09.2015