编译运行miniob最小数据库系统

minibo是一个用于教学的小型数据库系统,麻雀虽小五脏俱全,该项目包含了数据库的核心内容,并且代码量小,适合新手学习,最近由于需要学习c/cpp,因此打算从这个项目入手,本文就介绍编译运行miniob的方法。

下载源代码

首先去github下载源代码

GitHub - oceanbase/miniob: MiniOB is one mini database, helping developers to learn how database works.

如果github下载很慢可以去gitee上下载

miniob: fork from miniob (gitee.com)

编译的时候最好在linux环境下进行编译,我使用centos虚拟机进行编译(后来换成ubuntu子系统了),安装子系统的教程可以参考这篇博客

(8条消息) Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )_win10 linux_凌云飞鸿的博客-CSDN博客

linux编译环境初始化

在进行编译的时候我们需要初始化我们的编译环境,miniob的官方教程可以在下面的网址查看

MiniOB 简介 - MiniOB (oceanbase.github.io)

首先需要安装cmake,网上很多教程都是让你去官网下载,官网下载就是从github中下载,如果上不了github可以到看看下面的博客,博客中提供了百度网盘下载地址

(9条消息) centos7安装CMake3.21(离线安装)_centos 离线安装make_zhongxj183的博客-CSDN博客

按照博客里的顺序,我没有安装gcc(因为之前看系统里面已经有gcc了),而是先安装openssl,然后再安装cmake,然后就报错了

我们需要重新安装gcc,可能是系统自带的gcc不支持c++的编译,解决方法在下面这篇博客里

(9条消息) Cannot find a C++ compiler that supports both C++11 and the specified C++ flags. Please specify one_can not find a c++_饥饿小猪的博客-CSDN博客先安装gcc-c++

yum install -y gcc gcc-c++ 

然后再执行

./configure 

如果下载很慢可以更换一下yum源,方法在下面的博客里

(9条消息) Centos7更换yum国内源教程_centos7更换yum源_tianles的博客-CSDN博客

接着再次尝试安装cmake的时候发现找不到openssl,刚刚明明已经安装过了,不过不起作用

使用yum再安装一次

yum install openssl-devel 

然后再安装cmake就行了,编译的过程挺久的,编译完后查看cmake的版本,如果正常显示则表示安装成功

官方教程中说,建议gcc版本要在8.3以上,因此我们需要更新gcc

(9条消息) CentOS升级gcc到高版本(全部版本详细过程)_乞力马扎罗の黎明的博客-CSDN博客

我使用下面的命令进行更新

yum -y install centos-release-scl 
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 

scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

此时查看gcc版本会发现已经更新到9.3.x了

至此准备工作都完成了

编译代码

按照官方教程,切换到项目根目录,然后执行

bash build.sh init 

此时发现系统没有安装git

我们需要安装git,执行下面的命令进行安装

yum install -y git

接着安装的时候发现需要安装几个依赖库,安装依赖库的教程可以在oceanbase的官网找到,由于github访问较慢,所以我直接到gitee上下载

1.5 MiniOB 开发调试环境搭建-开发者入门教程-OceanBase文档中心-分布式数据库使用文档

安装jsoncpp

cd /data/miniob-main

git submodule add https://gitee.com/get-code-from-github/jsoncpp.git deps/jsoncpp

cd deps/jsoncpp

mkdir build

cd build

cmake -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF ..

make

make install

安装libevent

cd /data/miniob-main

git submodule add https://gitee.com/zwwlyy/libevent.git deps/libevent
cd deps/libevent

mkdir build

cd build

cmake .. -DEVENT__DISABLE_OPENSSL=ON

make

make install 

安装googletest

cd /data/miniob-main

git submodule add https://gitee.com/xinzhige/googletest.git deps/googletest
cd deps/googletest

mkdir build

cd build

cmake ..

make

make install

至此依赖库都已经安装完毕,可以开始编译项目

cd /data/miniob-main

mkdir build

cd build

cmake .. -DEBUG=ON

编译完后发现还是报错,后来就放弃centos,转而使用WSL在ubuntu20上进行编译了。

ubuntu上编译比centos简单很多,比如cmake和gcc,g++等等工具都可以直接使用apt install来安装。

需要在ubuntu上将之前的jsoncpp,googletest和libevent三个库重新安装一遍,除此之外,我们还需要安装MbedTLS库

cd /data/miniob-main

git submodule add https://gitee.com/kevinjen1031/mbedtls.git deps/MbedTLS
cd deps/MbedTLS

mkdir build

cd build

cmake ..

make

make install

然后还需要安装openssl库

apt-get install libssl-dev

然后还需要安装benchmark

cd /data/miniob-main

git submodule add https://gitee.com/TaylorZhang/benchmark.git deps/benchmark

cd deps/benchmark

mkdir build

cd build

// 将之前下载的 deps/googletest 复制到 deps/benchmark 文件夹下 

cmake .. -DCMAKE_BUILD_TYPE=RELEASE

make

make install

至此环境终于全部安装完毕,可以开始编译miniob了

cd /data/miniob-main

bash build.sh

此时又给我来了一个这样的报错

我定位到是代码中的这一句话有问题

我没读过代码,所以直接先将这一句话注释掉,然后编译成功,暂时先这么处理吧。

运行代码

编译完成后可以在bin目录下看到可执行文件

官方的教程在这里

如何运行 - MiniOB (oceanbase.github.io)

我们以最简单的方式运行

 ./observer -f ../../etc/observer.ini -P cli

我们可以通过命令行的方式和数据库进行交互,我们可以简单测试一下 CREATE TBALE 和 INSERT 语句。

CREATE TABLE t_date(id int, num int, price float, addr char, birthday date);

insert into t_basic values(1,1, 'a', 1.0);

insert into t_basic values(2,2, 'b', 2.0);

select * from t_basic;

这个数据库好像只能执行简单的sql语句,现在就算编译完成了,后续可以开始学习源代码啦。

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

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

相关文章

HTML <param> 标签

实例 向 HTML 代码添加一个对象: <object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="50"><param name="BorderStyle" value="1" /><param nam…

在CSDN学Golang场景化解决方案(OAuth2.0授权登录)

一.OAuth2.0协议流程分析 OAuth 2.0 是一种用于授权的开放标准&#xff0c;可以让用户授权第三方应用程序访问他们存储在另一个服务提供商上的资源&#xff0c;例如图片、文本等。下面是 OAuth 2.0 协议的流程&#xff1a; 第三方应用程序向认证服务器请求授权。认证服务器验…

Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存

1.adb shell 获取app 进程的pid adb shell "ps|grep com.xxx包名"根据某个渠道包&#xff0c;去查询对应的pid&#xff0c;如下所示&#xff1a; 2.通过adb shell 查看设备的java dalvik 堆内存的最大值 执行命令行&#xff1a; adb shell getprop dalvik.vm.h…

iOS开发-实现获取下载主题配置动态切换主题

iOS开发-实现获取下载主题配置动态切换主题 iOS开发-实现获取下载主题配置更切换主题&#xff0c;主要是通过请求服务端配置的主题配置、下载主题、解压保存到本地。通知界面获取对应的图片及颜色等。 比如新年主题风格&#xff0c;常见的背景显示红色氛围图片、tabbar显示新…

深度学习:梯度裁剪的理解

深度学习&#xff1a;梯度裁剪的理解 梯度裁剪简介设置范围值裁剪通过 L2 范数裁剪 附 在深度学习领域&#xff0c;梯度裁剪是一个常用的技巧&#xff0c;用于防止梯度过小或过大。下面简单介绍一下 梯度裁剪的原理与方法。 梯度裁剪简介 在深度学习模型的训练过程中&#xf…

记录springboot在k8s下无法读取文件问题

//加载配置文件 File file ResourceUtils.getFile("classpath:/template/job.yaml"); /对象映射 V1Job v1Job (V1Job) Yaml.load(file); 开发的时候使用上面的方法可以读取文件数据&#xff0c;但是部署到k8s容器中之后&#xff0c;读取文件出现报错&#xff0c…

[游戏数值] 常用刷新次数钻石消耗的设计

需满足要求 以一定规律增加能够在较少次数内增加到较大数值平滑增长 设计思路 增加值INT((当前序号-1)/X)*YZ X2&#xff0c;表示希望几个一组&#xff0c;通过INT()取整可获得0、0、1、1、2、2…这样的序列Y10&#xff0c;表示基础值&#xff0c;将上述序列变为0、0、10、1…

微信小程序插件 painter 生成海报、二维码

GitHub 地址&#xff1a;https://github.com/Kujiale-Mobile/Painter 一、引入 将 components/painter 整个文件放到自己项目的 components 中&#xff1b;以组件的形式在页面的 json 文件中引入&#xff1b; 二、使用 <view class"container"><image s…

REST API的基础:HTTP

在本文中&#xff0c;我们将深入探讨万维网数据通信的基础 - HTTP。 什么是超文本&#xff1f; HTTP&#xff08;超文本传输协议&#xff09;的命名源于“超文本”。 那么&#xff0c;什么是超文本&#xff1f; 想象一下由超链接组成的文本、图像和视频的混合物。这些链接充当我…

Restful的详细介绍~

RESTFUL简介&#xff1a; Restful是我们看待服务器的一种方式&#xff0c;我们都知道Java一切皆对象&#xff0c;因此在Java中&#xff0c;我们可以将所有的内容都看成对象&#xff0c;而在这里&#xff0c;RESTFUL是我们看待服务器的一种方式&#xff0c;我们可将服务器中的所…

C语言的链表操作

C语言中可以使用结构体和指针实现链表操作。链表是一种动态数据结构,由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。以下是一个简单的示例: #include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 struct Node {int data;struct No…

【C++】多态的实现及其底层原理

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;gitee仓库 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处。 文章目录 前言一、什么是多态&#xff1f;二、多态的构成条件2.1什么是虚函数&#xff1f;2.2虚函数的重写2…

pycharm 远程连接服务器并且debug, 支持torch.distributed.launch debug

未经允许&#xff0c;本文不得转载&#xff0c;vx&#xff1a;837007389 文章目录 step1&#xff1a;下载专业版本的pycharmstep2 配置自动同步文件夹&#xff0c;即远程的工程文件和本地同步2.1 Tools -> Deployment -> configuration2.2 设置同步文件夹2.3 同步服务器…

【深度学习】WaveMix: A Resource-efficient Neural Network for Image Analysis 论文

论文&#xff1a;https://arxiv.org/abs/2205.14375 代码&#xff1a;https://github.com/pranavphoenix/WaveMix 文章目录 ABSTRACTIntroductionBackground and Related WorksWaveMix Architectural FrameworkOverall architectureWaveMix block Experiments and ResultsTasks…

机器学习深度学习——Dropout

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——权重衰减 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 Drop…

ffmpeg常用功能博客导航

FFmpeg 是一个处理视频和音频内容的开源工具库&#xff0c;可以实现编码、解码、转码、流媒体和后处理等服务。 推荐博客&#xff1a; 常见命令和使用案例 用ffmpeg转mov为mp4格式 FFmpeg 常用命令 FFmpeg 常用命令编辑音/视频&#xff08;转换格式、压缩、裁剪、截图、切分合…

centos7安装nginx

一、下载安装包 方式一&#xff1a;官网下载 到nginx官网下载 然后上传到linux 服务器 方式二: wget 下载 wget http://nginx.org/download/nginx-1.22.0.tar.gz二、安装nginx 先安装相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 创建…

什么是 ASP.NET Core SignalR?

所有连接了 Internet 的应用程序都由服务器和客户端组成。 客户端依赖于服务器获取数据&#xff0c;而它们获取数据的主要机制是通过发出超文本传输协议 (HTTP) 请求来进行的。 某些客户端应用程序需要经常更改的数据。 ASP.NET Core SignalR 提供了一个 API&#xff0c;用于创…

(三)4. 深度生成模型-扩散模型(基于扩散的生成模型与分数匹配的变分视角)

“基于扩散的生成模型”与“分数匹配”的变分视角 1. 介绍1.1. 变分自动编码器1.2. 基于扩散的建模1.3. 主要内容2. 基于得分的随机微分方程生成建模基于离散时间扩散的生成模型和分数匹配方法在高维图像数据建模方面显示出了良好的效果。 最近,Song等人(2021)表明,通过学…

(Python):元类(metaclass), Type类,类实例,dataclass

文章目录 类实例类成员变量与成员变量的区别 Type类MetaclassABCMeta dataclass 类实例 在python中&#xff0c;所有的类都是一个实例&#xff0c;也就是说&#xff0c;所有的类其实都是由自己的属性和方法的。 这里就需要区分清楚一件事&#xff0c;类实例和对象。类实例指的…