0

rocksdb を使用するプログラムをコンパイルしようとしています。

公式 Web ページの例によると、コードに追加する必要がある唯一のヘッダーは db.h です。

今、私がコンパイルしているファイルはフォルダー A. db.h にありますが、A/rocksdb-master/include/rocksdb/ にあります。

したがって、次の行をファイルに追加します。

#include "rocksdb-master/include/rocksdb"

ファイルが見つかりますが、問題は db.h 内に次の行があることです。

#include "rocksdb/metadata.h"

そして、コンパイルすると、次のエラーが発生します。

致命的なエラー: rocksdb/metadata.h: No such file or directory #include "rocksdb/metadata.h"

つまり、それは明らかです。db.h は metadata.h と同じフォルダーにあるため、コンパイラーが rocksdb フォルダーを見つけられなくても問題ありません。しかし、このライブラリを書いた人がそれを知らないとは思えません。

パスを追加してコンパイルする他の方法はありますか? db.h からのパスがその場所に対して相対的でないのはなぜですか?

4

1 に答える 1

3

通常、プロジェクトでは次のヘッダーのみを使用する必要があります。

#include "rocksdb/db.h"

独自のプロジェクトをコンパイルするときは、RocksDB インクルード パスをインクルード ディレクトリのリストに追加する必要があります。たとえば、RocksDB ソース コードがディレクトリ../rocksdb-masterにある場合、インクルード パスは になります../rocksdb-master/include

インクルード パスをコンパイラ フラグに追加する方法は、実際にはコンパイラ固有です。g++ や clang では-I../rocksdb-master/include、独自のプログラムをコンパイルするときにコンパイラに渡すことによって行われます。多くの場合、RocksDB ライブラリにもリンクする必要があることに注意してください。

最後に、トランザクションなどの高度な概念を使用する場合は、さらに RocksDB ヘッダーを含める必要がある場合があります。

于 2015-09-22T10:16:39.290 に答える