diff --git a/content/zh/post/xingchen/gcc_compile.md b/content/zh/post/xingchen/gcc_compile.md
new file mode 100644
index 0000000000000000000000000000000000000000..85994adb7d39a9862114227a018a43eb71b21bb9
--- /dev/null
+++ b/content/zh/post/xingchen/gcc_compile.md
@@ -0,0 +1,164 @@
++++
+title = "gcc编译指导"
+date = "2021-02-23"
+tags = ["gcc编译指导"]
+archives = "2021-02-23"
+author = "xingchen"
+summary = "gcc编译指导"
+img = "/zh/post/xingchen/title/img1.png"
+times = "19:30"
++++
+
+## 概述
+
+openGauss的编译依赖gcc,目前官方推荐使用gcc7.3版本来编译。 但是三方库中未给出gcc的编译指导。本文档介绍如何编译gcc。
+
+
+## 步骤
+
+以openEuler20.03 LTS系统,arm架构,gcc7.3版本为例 (其他版本的gcc也与此相同)。
+Gcc的编译依赖 `gmp` `isl` `mpc` `mpfr` ,需要先编译这四个库。
+
+三方库依赖以及下载地址如下:
+
+
+
+
+ gcc7.3 |
+ http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/ |
+
+
+ gmp |
+ http://ftp.gnu.org/gnu/gmp/gmp-6.1.1.tar.xz |
+
+
+ mpc |
+ http://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz |
+
+
+ isl |
+ https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 |
+
+
+
+
+将这几个三方库上传到服务器上面,按照如下顺序进行编译:
+
+## 1. 编译gmp
+
+解压:`tar -xf gmp-6.1.1.tar.xz`
+
+编译:
+***prefix路径可以自己指定,表示编译结果存放路径。***
+
+```
+./configure --prefix=/usr2/zxb/compile/target/gmp
+make –j
+make install –j
+```
+
+## 2. 编译mpfr
+
+解压: `tar –xf mpfr-4.0.2.tar.gz`
+
+编译:
+***--prefix路径自己指定,--with-gmp路径为上一步gmp编译的prefix路径。下面与此相同。***
+
+```
+./configure --prefix=/usr2/zxb/compile/target/mpfr --with-gmp=/usr2/zxb/compile/target/gmp
+make –j
+make install -j
+```
+
+## 3. 编译mpc
+
+解压: `tar –xf mpc-1.1.0.tar.gz`
+
+编译:
+
+```
+./configure --prefix=/usr2/zxb/compile/target/mpc --with-gmp=/usr2/zxb/compile/target/gmp --with-mpfr=/usr2/zxb/compile/target/mpfr
+make –j
+make install -j
+```
+
+## 4. 编译isl
+
+解压: `tar –xf isl-0.18.tar.bz2`
+
+编译:
+
+```
+./configure --prefix=/usr2/zxb/compile/target/isl --with-gmp-prefix=/usr2/zxb/compile/target/gmp
+make –j
+make install -j
+```
+
+## 5. 编译gcc
+
+1. 先安装编译gcc需要的依赖
+
+```
+yum install gcc-c++ glibc-devel
+```
+
+2. 注释 `sys/ustat.h `相关信息
+
+在 `glibc>=2.28` 的系统,去掉了 `ustat.h` 文件,gcc源码需要删除相关信息。(可以通过 `yum list | grep glibc` 查看当前系统的 `glibc` 版本)
+
+```
+vim ./libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+```
+
+注释掉如下内容:
+
+```
+第157行 //#include
+第250行 //unsigned struct_ustat_sz = sizeof(struct ustat);
+```
+
+
+(参照: https://stackoverflow.com/questions/56096060/how-to-fix-the-gcc-compilation-error-sys-ustat-h-no-such-file-or-directory-i)
+
+3. 导入环境变量
+
+```
+export LD_LIBRARY_PATH=/usr2/zxb/compile/target/gmp/lib:/usr2/zxb/compile/target/mpfr/lib:/usr2/zxb/compile/target/mpc/lib:/usr2/zxb/compile/target/isl/lib:${LD_LIBRARY_PATH}
+export C_INCLUDE_PATH=/usr2/zxb/compile/target/gmp/include:/usr2/zxb/compile/target/mpfr/include:/usr2/zxb/compile/target/mpc/include:/usr2/zxb/compile/target/isl/include:${C_INCLUDE_PATH}
+```
+
+***环境变量中的路径,为上面编译的几个三方库各自的prefix路径。***
+
+4. 编译gcc
+
+***环境变量中的路径,为上面编译的几个三方库各自的prefix路径。***
+
+```
+./configure CFLAGS='-fstack-protector-strong -Wl,-z,noexecstack -Wl,-z,relro,-z,now ' --prefix=/usr2/zxb/compile/target/gcc --with-gmp=/usr2/zxb/compile/target/gmp --with-mpfr=/usr2/zxb/compile/target/mpfr --with-mpc=/usr2/zxb/compile/target/mpc --with-isl=/usr2/zxb/compile/target/isl --disable-multilib --enable-languages=c,c++
+make –j
+make install –j
+```
+
+
+## 6. 编译cmake
+
+下载cmake源码 `https://github.com/Kitware/CMake/releases`
+
+解压后进入到源码根目录
+
+```
+./configure --prefix=/usr2/zxb/compile/cmake3.18 ##prefix为编译结果路径
+make –j
+make install -j
+```
+
+
+## 拷贝gcc到三方库中
+
+编译完后,将 `/usr2/zxb/compile/target` 下的 `gmp mpfr mpc isl gcc` 拷贝到三方库二进制的 `buildtools/${platform}/gcc7.3` 下面,即可用来编译openGauss数据库。
+
+
+
+
+
+
diff --git a/content/zh/post/xingchen/images/compile/1.3.1.png b/content/zh/post/xingchen/images/compile/1.3.1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b9d45b7458e70ba6df096efaa0cd6407db0305f
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/1.3.1.png differ
diff --git a/content/zh/post/xingchen/images/compile/1.3.2.png b/content/zh/post/xingchen/images/compile/1.3.2.png
new file mode 100644
index 0000000000000000000000000000000000000000..10812f71b06c38987b9afafbcbbe80669b6c9614
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/1.3.2.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.1.1.png b/content/zh/post/xingchen/images/compile/2.1.1.png
new file mode 100644
index 0000000000000000000000000000000000000000..719ab072bf9880c8d1a6c427f323b0e0ff598195
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.1.1.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.2.1.png b/content/zh/post/xingchen/images/compile/2.2.1.png
new file mode 100644
index 0000000000000000000000000000000000000000..330e2a02bd09a9ef082e5f74e6935cca17c62f48
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.2.1.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.2.2.png b/content/zh/post/xingchen/images/compile/2.2.2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9a4508d91c645594a79a0ed68412285868ea423
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.2.2.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.2.3.png b/content/zh/post/xingchen/images/compile/2.2.3.png
new file mode 100644
index 0000000000000000000000000000000000000000..77a04ea80bf31b6dfb25bb2a8cae1382b1892bc3
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.2.3.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.3.1.png b/content/zh/post/xingchen/images/compile/2.3.1.png
new file mode 100644
index 0000000000000000000000000000000000000000..464185b9086cf0fa157558390f676725adb10a24
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.3.1.png differ
diff --git a/content/zh/post/xingchen/images/compile/2.3.2.png b/content/zh/post/xingchen/images/compile/2.3.2.png
new file mode 100644
index 0000000000000000000000000000000000000000..29b94d18615282f288145727a0396a49a33ebd4e
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/2.3.2.png differ
diff --git a/content/zh/post/xingchen/images/compile/gcc_conf.png b/content/zh/post/xingchen/images/compile/gcc_conf.png
new file mode 100644
index 0000000000000000000000000000000000000000..ded898806e657a94cfa804d8592a22c08bd072e5
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/gcc_conf.png differ
diff --git a/content/zh/post/xingchen/images/compile/gcc_mpp1.png b/content/zh/post/xingchen/images/compile/gcc_mpp1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d9bc5d85b1ad5a050ec706c7c502114ef81118c
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/gcc_mpp1.png differ
diff --git a/content/zh/post/xingchen/images/compile/gcc_mpp2.png b/content/zh/post/xingchen/images/compile/gcc_mpp2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8bd37903a5a0550e2ae02d64ba4a5ee9baf44d11
Binary files /dev/null and b/content/zh/post/xingchen/images/compile/gcc_mpp2.png differ
diff --git a/content/zh/post/xingchen/opengauss_compile.md b/content/zh/post/xingchen/opengauss_compile.md
new file mode 100644
index 0000000000000000000000000000000000000000..75b7f2fc2cb8c97c57d7f2bce47d14fef3799df6
--- /dev/null
+++ b/content/zh/post/xingchen/opengauss_compile.md
@@ -0,0 +1,265 @@
++++
+title = "openGauss数据库编译指导"
+date = "2021-02-23"
+tags = ["openGauss数据库编译指导"]
+archives = "2021-02-23"
+author = "xingchen"
+summary = "openGauss数据库编译指导"
+img = "/zh/post/xingchen/title/img1.png"
+times = "19:30"
++++
+
+
+
+
+- [1. 编译三方库](#1.编译三方库)
+ - [1.1.编译步骤概述](#1.1.编译步骤概述)
+ - [1.2.编译gcc和cmake](#1.2.编译gcc和cmake)
+ - [1.3.脚本增加平台信息](#1.3.脚本增加平台信息)
+ - [1.4.编译三方库](#1.4.编译三方库)
+ - [1.5.编译完成](#1.5.编译完成)
+- [2.编译数据库](#2.编译数据库)
+ - [2.1.编译数据库](#2.1.编译数据库)
+ - [2.2.编译适配其他系统](#2.2.编译适配其他系统)
+ - [2.3.编译适配其他版本gcc](#2.3.编译适配其他版本gcc)
+
+
+
+# openGauss数据库编译指导
+
+openGauss数据库的编译依赖很多三方库,社区已经在 `openGauss-third_party` 仓库中将所有的依赖放入其中,按照操作编译完三方库后,就可以使用编译好的三方库来编译数据库了。详细步骤如下:
+
+## 1.编译三方库
+
+社区针对 `centos_7.6_x86_64`、`openEuler20.03 LTS_arm`、`openEuler20.03 LTS_ x86_64` 三种架构及操作系统已经提供了编译好的二进制,对于这三种系统架构,可以直接使用社区提供的编译好的文件[openGauss-third_party_binarylibs.tar.gz](https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/openGauss-third_party_binarylibs.tar.gz),对于其他系统,需要用户自己编译。
+
+针对其他系统编译三方库步骤
+
+### 1.1.编译步骤概述
+
+(1) 需要自行编译好 `gcc` 和 `cmake`,gcc推荐使用 `7.3.0` 版本,cmake推荐 `>=3.16`(如果系统中的cmake版本>=3.16则直接使用系统自带cmake即可)。
+(2) 下载三方库源码,修改脚本增加新的平台信息。
+(3) 进入到 `openGauss-third_party/build` 下,运行 `sh build_all.sh` ,即可进行全量三方库的编译。
+ 在此编译过程中,首先编译了 `openssl` ,然后按照顺序编译构建工具 `buildtools` 、平台软件 `platform` 、三方依赖 `dependency`。
+(4) 编译完成后,编译结果在 `openGauss-third_party/output` 目录下。
+
+### 1.2.编译gcc和cmake
+
+gcc和cmake编译请参照:[gcc编译指导](/zh/post/xingchen/gcc_compile/)
+
+编译完成后,将gcc和cmake导入到环境变量中,然后便可进行三方库编译:
+```
+export CMAKEROOT=$cmake_prefix ##编译cmake指定的--prefix
+export GCC_PATH=$gcc_prefix ##编译gcc指定的--prefix
+export CC=$GCC_PATH/gcc/bin/gcc
+export CXX=$GCC_PATH/gcc/bin/g++
+export LD_LIBRARY_PATH=$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$CMAKEROOT/lib:$LD_LIBRARY_PATH
+export PATH=$GCC_PATH/gcc/bin:$CMAKEROOT/bin:$PATH
+```
+
+### 1.3.脚本增加平台信息
+
+修改 `openGauss-third_party/build/get_PlatForm_str.sh` 增加新的平台,如下图
+
+
+
+$kernel信息可以通过命令获取:
+```
+lsb_release -d | awk -F ' ' '{print $2}'| tr A-Z a-z
+```
+
+在以下python的三方依赖中,增加平台信息。
+```
+openGauss-third_party/dependency/fio/build.py
+openGauss-third_party/dependency/iperf /build.py
+openGauss-third_party/dependency/jemalloc/build.py
+openGauss-third_party/dependency/kerberos/build.py
+openGauss-third_party/dependency/libcgroup/build.py
+openGauss-third_party/dependency/libedit/build.py
+openGauss-third_party/dependency/nanomsg /build.py
+openGauss-third_party/dependency/numactl/build.py
+openGauss-third_party/dependency/openssl/build.py
+openGauss-third_party/dependency/protobuf/build.py
+```
+
+binary_parse 函数中,增加新的平台相关信息配置。这几个文件改动相同
+
+
+
+以下错误信息均是由于未增加平台信息引起:
+```
+Failed
+[Error] the plat form is not supported!
+[ERROR] Not supported platform type
+```
+
+
+### 1.4.编译三方库
+
+进入到`openGauss-third_party/build`目录,运行 `sh build_all.sh`,全量编译三方库
+如果在编译过程中,某一步有错误,解决错误后,可以注释掉已经编译好的三方库,只编译还未编译成功的库,分组单独进行编译。
+
+***编译buildtools***
+```
+cd openGauss-third_party/build_tools
+sh build_tools.sh
+```
+
+***编译platform***
+```
+cd openGauss-third_party/platform/build/
+sh build_platform.sh
+```
+
+***编译dependency***
+```
+cd openGauss-third_party/dependency/build/
+sh build_dependency.sh
+```
+
+
+### 1.5.编译完成
+编译结果在 `openGauss-third_party/output` 之中,目录层级结构如下(`${platform}` 即为当前平台信息):
+```
+openGauss-third_party
+ - output
+ - buildtools
+ - license_control
+ - server_key
+ - ${platform}
+ - gcc7.3
+ - common
+ - commons-codec
+ - fastjson
+ ……
+ - dependency
+ - ${platform}
+ - boost
+ - cjson
+ ……
+ - install_tools_${platform}
+ - asnlcrypto
+ ……
+ - platform
+ - ${platform}
+ - openjdk
+ ……
+```
+将编译好的 `gmp mpfr mpc isl gcc` 目录拷贝到`openGauss-third_party/output/buildtools/${platform}/gcc7.3`下,output目录即为完整的三方库二级制。将output目录拷贝出去,重命名为binarylibs,便可以使用它进行数据库编译。
+
+## 2.编译数据库
+
+以上完成三方库编译后,就可以开始数据库的编译了。以下介绍如何进行编译,以及修改代码适配不同的gcc版本、不同的操作系统。
+
+### 2.1.编译数据库
+
+下载openGauss-server代码,进入到源码目录下。
+
+***一键编译***
+
+编译命令:
+```
+sh build.sh -m release -3rd /usr2/compile/binarylibs
+```
+
+-3rd 为第一步编译好的三方库二进制目录
+-m 参数可选择 `debug|release|memcheck`
+编译完成后,目标文件在`./mppdb_tmp_install`下面。
+
+***手动编译***
+
+导入环境变量:
+```
+export CODE_BASE=/usr2/compile/openGauss-server
+export BINARYLIBS=/usr2/compile/binarylibs
+export GAUSSHOME=$CODE_BASE/dest/
+export GCC_PATH=$BINARYLIBS/buildtools/openeuler_aarch64/gcc7.3/
+export CC=$GCC_PATH/gcc/bin/gcc
+export CXX=$GCC_PATH/gcc/bin/g++
+export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
+export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH
+```
+
+参数说明:
+CODE_BASE 为openGauss-server源码目录;
+BINARYLIBS 为第一步编译好的三方库二进制目录;
+GAUSSHOME 为编译完成的目标文件路径;
+GCC_PATH 二进制中,GCC编译结果存放的路径,需要修改里面的openeuler_aarch64为实际的平台信息。
+
+
+
+编译命令如下:
+```
+./configure --gcc-version=7.3.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib
+make –sj
+make install –sj
+```
+
+### 2.2.编译适配其他系统
+
+对于 `centos_7.6` 以及 `openEuler20.03 LTS` 操作系统,可以直接编译。其他系统需要修改代码适配。
+
+***修改脚本新增平台:***
+
+打开 `openGauss-server/src/get_PlatForm_str.sh`,在里面(134行)增加新的平台信息,例如:
+
+
+
+在 `openGauss-server/build/script/mpp_package.sh:46` 行
+和 `openGauss-server/build/script/package_opengauss.sh:55` 行
+增加平台的信息。
+
+
+
+***修改Makefile文件***
+打开`openGauss-server/src/gausskernel/Makefile`文件,在702行,复制一份其他系统的并更改为当前平台。
+
+
+
+***一键编译***
+```
+sh build.sh -m release -3rd /usr2/compile/binarylibs
+```
+
+***手动编译***
+
+参照***2.1编译数据库***的***手动编译***命令,只需要修改 `GCC_PATH` 中平台参数,其他操作保持一致。
+```
+export GCC_PATH=$BINARYLIBS/buildtools/ubuntu_x86_64/gcc7.3/
+```
+
+
+### 2.3.编译适配其他版本gcc
+
+当前openGauss固定编译使用的gcc版本为 `gcc7.3`,如果使用其他gcc版本,例如 `gcc8.2`(支持c11标准),也可以进行编译。需要修改代码适配。
+
+***修改配置中的gcc版本为指定版本***
+```
+openGauss-server/configure:936行,gcc_version改为指定版本。
+openGauss-server/build/script/mpp_package.sh 62行和311行(关键字gcc_version),7.3.0改为指定版本。
+```
+configure文件:
+
+mpp_package文件:
+
+
+
+
+***一键编译***
+```
+sh build.sh -m release -3rd /usr2/compile/binarylibs
+```
+
+***手动编译***
+参照2.1手动编译命令,修改环境变量的gcc版本为指定版本:
+```
+export GCC_PATH=$BINARYLIBS/buildtools/openeuler_aarch64/gcc8.2/
+```
+
+
+修改configure版本为指定版本:
+```
+./configure --gcc-version=8.2.0 ........
+```
+
+其他命令与2.1一致。
\ No newline at end of file