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

本章完结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 开发 “控件之家“

本篇文章我们来描述一下Qt 控件 是qt中最基本 也是最难缠的 有种“小鬼难缠的感觉” qt常用控件大集合 Qt是一个广泛使用的跨平台应用程序框架&#xff0c;它提供了许多用于构建图形用户界面(GUI)的控件。以下是一些Qt中常用的控件&#xff1a; QPushButton&#xff1a;这是…

【Qt笔记】QSS中常见的伪状态

QSS中常见的伪状态 伪状态描述:active当组件处于一个活动的窗口时&#xff0c;此状态为真:adjoins-itemQTreeView::brance与一个条目相邻时&#xff0c;此状态为真::alternate当QAbstractItemView的alternatingRowColors属性为true,绘制交替的行时此状态为真:bottom组件处于底…

软考 系统分析师系列知识点之信息系统战略规划方法(12)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之信息系统战略规划方法&#xff08;11&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.8 战略一致性模型 信息化战略接受企业战略的指导&#xff0c;企业战略需要信息化…

链表总结 -- 《数据结构》-- c/c++

链表的概念 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的…

适用于Android 的 7 大短信恢复应用程序

对于 Android 用户来说&#xff0c;丢失重要的短信可能是一种令人沮丧的体验。幸运的是&#xff0c;有许多短信恢复应用程序可以帮助恢复丢失或删除的短信。在本文中&#xff0c;将与您分享 7 个最佳短信恢复应用程序&#xff0c;并帮助您找到可用于恢复已删除消息的最佳应用程…

【网工】华为设备命令学习(防火墙)

实验目的PC1连接到外网。 关于防火墙的其他知识后续补充。 ensp里的防火墙 用户名admin 密码Admin123 防火墙的接口类型 1.路由模式 物理口可以直接配. ​​​​​2.交换模式 物理口不能直接配IP&#xff0c;类似交换机&#xff0c;可以配vlan 首先我们先要对各个设备进…

【深度学习】S2 数学基础 P6 概率论

目录 基本概率论概率论公理随机变量 多个随机变量联合概率条件概率贝叶斯定理求和法则独立性 期望与方差小结 基本概率论 机器学习本质上&#xff0c;就是做出预测。而概率论提供了一种量化和表达不确定性水平的方法&#xff0c;可以帮助我们量化对某个结果的确定性程度。 在…

2.1.1 摄像头

摄像头 更多内容&#xff0c;请关注&#xff1a; github&#xff1a;https://github.com/gotonote/Autopilot-Notes.git 摄像头是目前自动驾驶车中应用和研究最广泛的传感器&#xff0c;其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟&#…

【TC3xx芯片】TC3xx芯片SMU模块详解

目录 前言 正文 1.SMU功能概述 1.1 SMU架构 1.2 SMU_core 1.3 SMU_stdby 2. SMU功能详述 2.1 SMU_core 2.1.1 Reset类型 2.1.2 接口&#xff08;Interfaces&#xff09;概述 2.1.2.1 SMU_core到SCU的接口 2.1.2.2 SMU_core到IR的接口 2.1.2.3 SMU_core到Ports(Err…

5.8 BCC工具之mysqld_query.py解读

一,mysqld_query简介 我们首先来看USDT,USDT即Userland Statically Defined Tracing,它是一种静态定义的跟踪技术,用于在用户空间应用程序中添加自定义的跟踪点。USDT利用DTrace(动态跟踪)框架,允许开发者在代码中定义跟踪点,并在需要时启用它们。这样,开发人员可以在…

私立医院患者大数据分析平台建设方案

一、项目目标 1、数据质量,统计数字不仅是真实可信,而且要及时,便于及时判断企业经营情况,同时通过内外部数据的对标,发现企业经营问题。 2、提供指标的监控预警,为决策提供支持,减少杂乱无用报表的生产。 3、提升数据处理效率,提高报表的可用性,让数据标准化,提高…

英文论文(sci)解读复现【NO.18】基于DS-YOLOv8的目标检测方法用于遥感图像

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 细节&#xff1a; 1. 首先根据题意就是只有5.的成本&#xff0c;然后就开始找钱&#xff0c;找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义&#xff0c;然后去循环…

队列的实现及注意事项

主要介绍以C为主的队列的实现 头文件 #include<queue> 定义 //queue<类型>变量名;//如&#xff1a;queue<int> que; //定义int型的队列 queue<node> que; //定义自定义结构体类型队列 成员函数 //变量名.成员方法&#xff08;成员函数&…

面试经典150题——螺旋矩阵

"The harder the conflict, the more glorious the triumph." - Thomas Paine 1. 题目描述 2. 题目分析与解析 2.1 思路一 看到题目&#xff0c;先仔细观察矩阵&#xff0c;题目要求我们给出顺时针遍历的结果即可&#xff0c;我们根据矩阵可以看出&#xff0c;首…

使用浅层神经网络进行模式识别

目录 定义问题 使用神经网络模式识别进行模式识别 使用命令行函数进行模式识别 选择数据 选择训练算法 创建网络 划分数据 训练网络 测试网络 查看网络 分析结果 后续步骤 除了函数拟合,神经网络也擅长识别模式。 例如,假设要根据细胞大小、肿块厚度、有…

Android 12.0 MTK Camera2 设置默认拍照尺寸功能实现

1.前言 在12.0的系统rom定制化开发中,在mtk平台的camera2关于拍照的一些功能修改中,在一些平台默认需要设置最大的分辨率 来作为拍照的分辨率,所以就需要了解拍照尺寸设置流程,然后来实现相关的功能 如图: 2.MTK Camera2 设置默认拍照尺寸功能实现的核心类 \vendor\me…

【区块链技术开发语言】在ubuntu18 系统环境下命令操作配置以太坊go-ethereum环境

一、概述 项目简介: 以太坊是一个基于区块链技术的分布式平台,用于构建去中心化应用程序(DApps)。go-ethereum 是以太坊官方开发团队维护的 Go 语言实现的以太坊客户端,也被称为 Geth。它提供了一个完整的以太坊节点,用于参与以太坊网络,执行智能合约,进行交易等。 前提…

.NET Core MongoDB数据仓储和工作单元模式实操

前言 上一章节我们主要讲解了MongoDB数据仓储和工作单元模式的封装&#xff0c;这一章节主要讲的是MongoDB用户管理相关操作实操。如&#xff1a;获取所有用户信息、获取用户分页数据、通过用户ID获取对应用户信息、添加用户信息、事务添加用户信息、用户信息修改、用户信息删除…

Matplotlib plt.scatter:从入门到精通,只需一篇文章!

Matplotlib plt.scatter&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;&#x1f680; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; 一、plt.scatter入门&#xff1a;轻松迈出第一步 &#x1f463;二、进阶探索&#xff1a;plt.scatt…