由于引用了不同版本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

搞定。

;