how_to_build.md 4.3 KB
Newer Older
羽飞's avatar
羽飞 已提交
1
# How to build
羽飞's avatar
羽飞 已提交
2 3 4 5 6 7 8 9 10

0. base

假设系统上已经安装了make等编译工具。

MiniOB 需要使用:
- cmake 版本 >= 3.10
- gcc/clang gcc建议8.3以上,编译器需要支持c++14等新标准

羽飞's avatar
羽飞 已提交
11 12
1. install cmake

羽飞's avatar
羽飞 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25
需要安装了3.10或以上版本的cmake,可以跳过此步骤。
[cmake官网](https://cmake.org/download/) 下载对应系统的cmake然后安装。
比如
```bash
wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.sh
bash cmake-3.24.0-linux-x86_64.sh
```

如果是mac系统,可以执行下面的命令安装:

```bash
brew install cmake
```
羽飞's avatar
羽飞 已提交
26

羽飞's avatar
羽飞 已提交
27
2. install gcc
羽飞's avatar
羽飞 已提交
28

羽飞's avatar
羽飞 已提交
29 30 31
如果是个人学习使用,clang通常没有问题,但是如果是参加比赛或者OceanBase官网训练营使用,建议安装GCC。因为clang也某些情况下的表现会与GCC不一致。
另外,如果GCC的版本比较旧,也需要安装较新版本的GCC。有些比较旧的操作系统,比如CentOS 7,自带的编译器版本是4.8.5,对C++14等新标准,支持不太好,建议升级GCC。
在Linux系统上,通常使用 `yum install gcc gcc-g++` 就可以安装gcc,但是有些时候安装的编译器版本比较旧,还需要手动。
羽飞's avatar
羽飞 已提交
32

羽飞's avatar
羽飞 已提交
33 34 35
- 如何查看GCC版本
```bash
gcc --version
羽飞's avatar
羽飞 已提交
36 37
```

羽飞's avatar
羽飞 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
- 下载GCC源码


可以在[GCC 官网](https://gcc.gnu.org/)浏览,找到镜像入口,选择速度比较快的镜像,比如 [Russia, Novosibirsk GCC镜像链接](http://mirror.linux-ia64.org/gnu/gcc/releases/),然后选择自己的版本。
建议选择8.3或以上版本。
因为miniob是为了学习使用,所以可以选择比较新的GCC,不追求稳定。

- 编译GCC源码

> NOTE: 编译高版本的GCC时,需要本地也有一个稍高一点版本的GCC。比如编译GCC 11,本地的GCC需要能够支持stdc++11才能编译。可以先编译GCC 5.4,然后再编译高版本。

如果你看到这里想放弃,可以选择MiniOB提供的[docker镜像](https://hub.docker.com/r/oceanbase/miniob),其中自带GCC 11。

下载的代码文件,比如是 gcc-11.3.0.tar.gz

```bash
# 解压
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 \
    --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++`
#       来指定编译器
```

如果./contrib/download_prerequisites 下载时特别慢或下载失败,可以手动从官网上下载依赖,然后解压相应的包到gcc的目录下。
```
ftp://ftp.gnu.org/gnu/gmp
https://mpfr.loria.fr/mpfr-current/#download
https://www.multiprecision.org/mpc/download.html
```

3. build libevent

```bash
羽飞's avatar
羽飞 已提交
97 98 99 100 101 102 103 104 105 106 107
git submodule add https://github.com/libevent/libevent deps/libevent
cd deps
cd libevent
git checkout release-2.1.12-stable
mkdir build
cd build
cmake .. -DEVENT__DISABLE_OPENSSL=ON
make
sudo make install
```

羽飞's avatar
羽飞 已提交
108
4. build google test
羽飞's avatar
羽飞 已提交
109

羽飞's avatar
羽飞 已提交
110
```bash
羽飞's avatar
羽飞 已提交
111 112 113 114 115 116 117 118 119 120
git submodule add https://github.com/google/googletest deps/googletest
cd deps
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install
```

羽飞's avatar
羽飞 已提交
121
5. build jsoncpp
羽飞's avatar
羽飞 已提交
122

羽飞's avatar
羽飞 已提交
123
```bash
羽飞's avatar
羽飞 已提交
124 125 126 127 128 129 130 131 132 133
git submodule add https://github.com/open-source-parsers/jsoncpp.git deps/jsoncpp
cd deps
cd jsoncpp
mkdir build
cd build
cmake -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF ..
make
sudo make install
```

羽飞's avatar
羽飞 已提交
134
6. build miniob
羽飞's avatar
羽飞 已提交
135

羽飞's avatar
羽飞 已提交
136
```bash
羽飞's avatar
羽飞 已提交
137 138 139
cd `project home`
mkdir build
cd build
羽飞's avatar
羽飞 已提交
140 141
# 建议开启DEBUG模式编译,更方便调试
cmake .. -DDEBUG=ON
羽飞's avatar
羽飞 已提交
142 143
make
```