最近想研究研究leveldb,踩了很多坑,发现网上问题五花八门,全程保姆式记录下自己的坑
ps: 不知道leveldb是啥的小伙伴,就不需要向下看了!!!
背景介绍:
操作系统:CentOS-7
GCC版本:gcc4.8.5
1 把玩第一步——下载源码
第一步就踩坑了,一顿设置,终于能从github上下载了leveldb v1.2的代码,开整
这个细节大家可以自行研究,比较简单 ,主要是设置ssh key
2 把玩第二步——编译
#1 cd leveldb && mkdir build
第二条命令注意使用cmake3
#2 cd build && cmake3 -DCMAKE_BUILD_TYPE=Release .. -DLEVELDB_BUILD_TESTS=0 -DLEVELDB_BUILD_BENCHMARKS=0 && cmake3 --build .
解释下这里禁掉了gtest和benchmark的编译,里面大量使用了c++14标准语法,升级gcc4.8.5比较麻烦,所以这里没搞,感兴趣的小伙伴可以自己深入研究
#3 编译成功 可以看见产出了libleveldb.a
3 把玩第三步——测试
#1 cd build && mkdir test
#2 cd test && vim main.cpp
#include <assert.h>
#include <iostream>
#include "leveldb/db.h"
using namespace std;
int main(int argc,char * argv[])
{
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
std::string dbpath = "tdb";
leveldb::Status status = leveldb::DB::Open(options, dbpath, &db);
assert(status.ok());
std::string k = "openapi";
std::string v = "openapi@163.com";
cout<<"Open db OK"<<std::endl;
std::string value;
leveldb::Status s;
s = db->Put(leveldb::WriteOptions(), k, v);
s = db->Get(leveldb::ReadOptions(), k, &value);
cout<<value<<std::endl;
delete db;
return 0;
}
#3 g++ -std=c++11 -o ldb main.cpp -I ../../include ../libleveldb.a -lpthread
正常情况下,已经可以看到产出 ldb的可执行文件
#4 ./ldb
可以看到输出v = openapi@163.com
好,大家可以继续深入把玩leveldb了