由於引用了不同版本leveldb的頭文件導致的異常

下載了leveldb 1.5版本研究研究,寫了如下代碼:

leveldb::Options options;
options.create_if_missing = true;
options.block_cache = leveldb::NewLRUCache(100 * 1048576);
options.filter_policy = new CustomFilterPolicy();
leveldb::DB* db;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
assert(status.ok());

編譯完leveldb後在當前目錄生成了libleveldb.a和libleveldb.so,用

g++ libleveldb.a -pthread -lsnappy test.cpp

編譯,運行發現filter_policy沒生效,跟蹤到Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr)函數發現options.filter_policy爲空,於是分別在調用leveldb::DB::Open之前和leveldb::DB::Open函數內部打印了options的大小,前者80,後者96,想到已經安裝過新版本的leveldb,猜測是找頭文件的時候找到/usr/local/include/leveldb/去了,所以將編譯命令改爲

g++ libleveldb.a -pthread -lsnappy test.cpp -Iinclude

搞定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章