1. LevelDB源码下载
环境:Ubuntu18.04(我使用的是wsl2)
git clone https://github.com/google/leveldb.git
cd leveldb/
#注意这里直接编译会报错,因为third_party目录下缺少googletest和benchmark
#所以下一步分别下载googletest和benchmark
cd third_party/
git clone https://github.com/google/googletest.git
git clone https://github.com/google/benchmark.git
cd ..
#准备工作完成,开始编译,需要等待较长时间
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .
#等待编译完成后将静态库加入/usr/local/lib中
cd ..
sudo cp build/libleveldb.a /usr/local/lib/
sudo cp -r include/leveldb/ /usr/local/include/
2. 静态库使用测试
随便找一个目录创建文件demo.cc
编写如下代码:
#include <iostream>
#include <string>
#include <leveldb/db.h>
using namespace std;
int main()
{
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
cout <<"status:" << status.ok() << endl;
if(!status.ok()){
return 1;
}
string key = "apple";
string value = "A";
string get;
leveldb::Status s = db->Put(leveldb::WriteOptions(), key, value);
if (s.ok())
s = db->Get(leveldb::ReadOptions(), key, &get);
if (s.ok())
cout << "key:" << key << "\nget value:" << get << std::endl;
else
cout << "error occurred!" << endl;
delete db;
return 0;
}
用g++链接-lleveldb库编译并运行
g++ -o demo demo.cc -pthread -lleveldb -std=c++11
./demo
我在执行编译命令时出现了报错,报错信息如下:
(.text+0x20): undefined reference to `main’ and undefined reference to function
后来发现是因为我的demo.cc路径错了,当前路径的demo.cc里面是空的!一定要检查仔细
查阅博客时发现链接顺序不同也可能导致这个错误
执行结果如下:
至此测试完成!