2015-08-31 42 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標頭。交易。

相關問題