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

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL