LevelDB源码阅读笔记(0、下载编译leveldb)

2024-02-17 18:20

本文主要是介绍LevelDB源码阅读笔记(0、下载编译leveldb),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LevelDB源码阅读笔记(0、下载编译leveldb)

LeveDB源码笔记系列:

LevelDB源码阅读笔记(0、下载编译leveldb)

本博客环境如下

[root@localhost build]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

简介

LevelDB是由Google使用C++开发的磁盘kv存储引擎。基于LSMTree使用顺序写(追加写)的方式实现了极高的写性能。RocksDB,Ceph等都可以看到它的身影。

环境搭建以及下载安装

命令如下:

# 下载
git clone https://github.com/google/leveldb.gitcd leveldbmkdir buildcd buildcmake ..

不出所料,会报错如下:

...CMake Error at CMakeLists.txt:303 (add_subdirectory):The source directory/root/workspace/leveldb/third_party/googletestdoes not contain a CMakeLists.txt file.CMake Error at CMakeLists.txt:307 (set_property):set_property could not find TARGET gtest.  Perhaps it has not yet beencreated.CMake Error at CMakeLists.txt:309 (set_property):set_property could not find TARGET gmock.  Perhaps it has not yet beencreated.CMake Error at CMakeLists.txt:411 (add_subdirectory):The source directory/root/workspace/leveldb/third_party/benchmarkdoes not contain a CMakeLists.txt file.-- Looking for sqlite3_open in sqlite3
-- Looking for sqlite3_open in sqlite3 - not found
...

此时需要进入项目的third_party目录下载三方依赖:

cd leveldb/third_partygit clone https://github.com/google/googletest.git
git clone https://github.com/google/benchmark.git

由于centos7.9下载的g++默认版本(默认是c++98)是:

[root@localhost build]# g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

直接make也会看到报错,这是因为leveldb要求至少是c++14,故需要升级g++:

yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpmyum install devtoolset-[g++版本号]-gcc-c++# 切换g++版本,仅对当前会话有效
# 也可以使用:source /opt/rh/devtoolset-[版本号]/enable
scl enable devtoolset-[g++版本号] bash

开始编译:

cd leveldb/buildcmake ..# 编译
make -j4## 在build目录下会生成一个静态库libleveldb.a

leveldb使用的小deamo,该测试文件位于leveldb项目的根目录

// 文件名为:test.cc
#include <cassert>
#include <iostream>
#include <string>
#include "include/leveldb/db.h"int main() {leveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options, "./data", &db);assert(status.ok());std::string key = "test_key";std::string write_value = "test_value";std::string read_value;leveldb::Status s = db->Put(leveldb::WriteOptions(), key, write_value);if (s.ok()){s = db->Get(leveldb::ReadOptions(), key, &read_value);}if (s.ok()){std::cout << "key=" << key << "\nvalue=" << read_value  << std::endl;}else{std::cout << "failed to find the key!" << std::endl;}delete db;return 0;
}

编译&运行:

// 使用如下命令也可以编译:
// g++ -I ./include -Wall -std=c++11 -o test.bin test.cc -L ./build/ -lpthread -lleveldb[root@localhost leveldb]# g++ -I ./include -Wall -std=c++11 -o test.bin test.cc ./build/libleveldb.a -lpthread
[root@localhost leveldb]# ./test.bin 
key=test_key
value=test_value

本章完结

这篇关于LevelDB源码阅读笔记(0、下载编译leveldb)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718627

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel