#include <cassert>
#include <cstdlib>
#include <string>
#include <leveldb/db.h>
using namespace std;
int main(){
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
// options.compression=leveldb::kNoCompression;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testldb",&db);
assert(status.ok());
std::string key = "a";
std::string value = "value_a";
std::string get_value;
leveldb::Status s = db->Put(leveldb::WriteOptions(),key,value);
if(s.ok())
s = db->Get(leveldb::ReadOptions(),"a",&get_value);
if(s.ok())
cout<<"get_value:"<<get_value<<endl;
else
cout<<s.ToString()<<endl;
delete db;
return 0;
}
在ubuntu14.LTS下编译总报错,
编译命令如下:g++ dev.cc -o dev -lpthread -lleveldb
或g++ dev.cc -o dev_a -lpthread ./libleveldb.a
大概是这个意思:
In file included from /usr/include/leveldb/iterator.h:20:0,
from /usr/include/leveldb/db.h:12,
from dev.cc:6:
/usr/include/leveldb/status.h:27:10: error: expected ';' at end of member declaration
Status() noexcept : state_(nullptr) {}
^
/usr/include/leveldb/status.h:27:12: error: 'noexcept' does not name a type
Status() noexcept : state_(nullptr) {}
^
/usr/include/leveldb/status.h:33:16: error: expected ',' or '...' before '&&' token
Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; }
^
/usr/include/leveldb/status.h:33:22: error: invalid constructor; you probably meant 'leveldb::Status (const leveldb::Status&)'
Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; }
解决方式:
找到了解决方式
需要增加一个-std=c++11的选项才可以,变成如下方式:
g++ -std=c++11 dev.cc -o dev -lpthread -lleveldb 或
g++ -std=c++11 dev.cc -o dev_a -lpthread ./libleveldb.a
这样可以正确编译通过,执行dev或dev_a可以看到正确执行结果:value_a
同时在/tmp/testldb/下看到数据库文件