miniob构建及开发环境配置
https://www.oceanbase.com/docs/community-developer-quickstart-10000000000627365
https://oceanbase.github.io/miniob/how_to_build/
环境配置
- CMake:3.10 版本以上。
- GCC/Clang:GCC 建议 8.3 版本以上,编译器需要支持 C++20 等新标准
gcc 9.4 cmake 3.16
sudo apt install cmake git
gitee 配置ssh
ssh-keygen -t rsa -C "szh-nine@outlook.com"
# 将~/.ssh/id_rsa.pub 里的公钥添加到gitee里
ssh -T git@gitee.com # 连接
git remote add origin git@gitee.com:si-zihui/MiniOb.git
git remote set-url origin git@gitee.com:si-zihui/MiniOb.git
git remote -v # 检查远程仓库url设置,若为https,则即便设置了ssh也要输入密码,必须为git
git init
git add .
git commit -m "init"
git branch -m main master # 将main分支重命名为master
git push -u origin master # 提交代码
构建miniob
https://github.com/skyitachi/miniob/blob/main/docs/how_to_build.md
下载代码
git clone
连接断开,直接到github下载,上传到服务器
git clone https://github.com/oceanbase/miniob.git
git clone git@github.com:oceanbase/miniob.git
过了一段时间又连接上了
安装依赖库
bash ./build.sh init
这会安装几个依赖库,在github上,总之绕不过github,换成ssh协议链接正常一点
# git submodule foreach 'git config submodule.$name.url git@github.com:$name'
git submodule sync # 同步gitmodule信息
git submodule deinit -f . # 清理缓存
git submodule update --init --recursive --force # 自动下载子模块,还需要编译
编译
bash ./build.sh
GCC 9.4 支持 C++20 的部分特性(如概念、协程的实验性支持),但 <span>
头文件(标准库中的 std::span
)在 GCC 9.4 中尚未完全实现
编译gcc11
sudo apt install gcc-11 g++-11 #升级
软件源里没有高版本的gcc,所以下载源码编译
gnu 镜像站列表 https://www.gnu.org/prep/ftp.html
选择中科大镜像 https://mirrors.ustc.edu.cn/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz
安装在默认路径/usr/local
下
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz
tar xzvf gcc-11.3.0.tar.gz
cd gcc-11.3.0
# 下载依赖
./contrib/download_prerequisites
# 配置。可以通过prefix参数设置编译完成的GCC的安装目录,如果不指定,会安装在/usr/local下
# 可以配置为当前用户的某个目录
./configure --prefix=/your/new/gcc/path --enable-threads=posix --disable-checking \
--disable-multilib --enable--long-long --with-system-zlib --enable-languages=c,c++
# 开始编译
make -j
# 安装
# 编译产生物会安装到 configure --prefix指定的目录中,或系统默认目录下
make install
# 修改环境变量
# 可以将下面的配置写到 .bashrc 或 .bash_profile 中,这样每次登录都会自动生效
export PATH=/your/new/gcc/path/bin:$PATH
export LD_LIBRARY_PATH=/your/new/gcc/path/lib64:$LD_LIBRARY_PATH
export CC=/your/new/gcc/path/bin/gcc
export CXX=/your/new/gcc/path/bin/g++
# NOTE: 上面的环境变量CC和CXX是告诉CMake能够找到我们的编译器。cmake优先查找的
# 编译器是cc而不是gcc,而一般系统中会默认带cc,所以使用环境变量告诉cmake。
# 也可以使用 cmake 参数
# `-DCMAKE_C_COMPILER=/your/new/gcc/path/bin/gcc -DCMAKE_CXX_COMPILER=/your/new/gcc/path/bin/g++`
# 来指定编译器
服务器内存占用过多,崩了
清理残留编译文件
make clean # 删除大多数生成的文件 make distclean # 彻底清理(若配置错误需重新配置时使用) # 无效
直接删除build文件
rm -rf build-x86_64-pc-linux-gnu/
重新编译
make -j # 自动使用当前 CPU 核心数(线程数)个并发任务来编译,服务器内存小多线程容易崩,建议使用较小的线程数 make -j1
单线程执行了五六个小时,然后安装
sudo make install
添加环境变量 至
~/.bashrc
或者/etc/profile
维度 ~/.bashrc
/etc/profile
范围 用户级 系统级 时机 每次非登录 Shell 启动 用户登录时 用途 个性化终端配置 全局环境与系统配置 # /usr/local/ export PATH=/usr/local/bin:$PATH export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH export CC=/usr/local/bin/gcc export CXX=/usr/local/bin/g++
重新编译miniob
gcc升级后,之前安装的依赖库可能不兼容,所以重新下载
./build.sh
出现同样的错误,查看日志,发现使用的仍为旧版本
bash ./build.sh
THIRD_PARTY_INSTALL_PREFIX is /home/hh/miniob/deps/3rd/usr/local
./build.sh
Build type: debug
create soft link for build_debug, linked by directory named build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 --log-level=STATUS /home/hh/miniob -DCMAKE_BUILD_TYPE=debug
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
修改build.sh
,指定编译时的gcc和g++
CMAKE_COMMAND='cmake \
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 \
-DCMAKE_C_COMPILER=/usr/local/bin/gcc \
-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath=/usr/local/lib64 \
--log-level=STATUS'
再次编译
系统缺少 flex
和 bison
工具,它们是用于生成词法分析器(.l
文件)和语法分析器(.y
文件)代码的工具
sudo apt install flex bison
再次编译,编译成功!
运行
以直接执行命令的方式启动服务端程序
sudo ./bin/observer -f ../etc/observer.ini -P cli
若启动失败,如下图
创建目录需要sudo权限
开发环境搭建
安装插件
cmake c++
[submodule "deps/3rd/libevent"]
path = deps/3rd/libevent
url = git@github.com:libevent/libevent.git
[submodule "deps/3rd/jsoncpp"]
path = deps/3rd/jsoncpp
url = git@github.com:open-source-parsers/jsoncpp.git
[submodule "deps/3rd/googletest"]
path = deps/3rd/googletest
url = git@github.com:google/googletest.git
[submodule "deps/3rd/benchmark"]
path = deps/3rd/benchmark
url = git@github.com:google/benchmark.git
[submodule "deps/3rd/replxx"]
path = deps/3rd/replxx
url = git@github.com:AmokHuginnsson/replxx.git
手动编译gdb
gcc11.3 适配的gdb版本为11.1 10.2
https://mirrors.ustc.edu.cn/gnu/gdb/gdb-11.1.tar.gz
wget https://mirrors.ustc.edu.cn/gnu/gdb/gdb-11.1.tar.gz
tar xavf gdb-11.1.tar.gz
cd gdb-11.1
sudo apt install expect dejagnu gawk texinfo
# 忘记创建build目录了
mkdir build
cd build
../configure
make -j1
sudo make install