下載了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
搞定。