对于一个学c++不到两小时的我来说,本来打算是放弃编译chainsql的,编译过程实在艰辛难受,不过幸好成功,特此记录一下过程。
环境准备
新建一个目录,我把它叫做arch,用来存放待会安装的依赖包
yum –y install centos-release-sclyum –y install devtoolset-7yum -y install python-devel# 这里是从零开始安装mysql# wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# yum –y install mysql80-community-release-el7-3.noarch.rpm# yum –y install mysql-community-server# systemctl start mysqld.service# 如果你的所在系统已经有了mysql,那就不需要执行wget https://cmake.org/files/v3.10/cmake-3.10.2.tar.gzwget https://dl.bintray.com/boostorg/release/1.63.0/source/boost_1_63_0.tar.gzwget http://www.zlib.net/zlib-1.2.11.tar.gzwget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2m.tar.gzwget https://www.openssl.org/source/openssl-fips-2.0.16.tar.gzwget https://github.com/protocolbuffers/protobuf/archive/v3.5.0.tar.gz
开始安装
先进入dev-7的bash环境,这个环境变量是一次性的,如果你不小心退出了,可以再进去,他只是临时将gcc等一系列套件生效,不用你再去编译安装了
scl enable devtoolset-7 bash
安装cmake
cmake版本必须要3.5.0以上,这里我用的3.10.2
tar xf cmake-3.10.2.tar.gzcd cmake-3.10.2./bootstrapgmakegmake install
安装boost库
如果系统中存在boost,看下版本是不是1.63,如果不是则一定要换,低点版本或者高点版本将会导致意料之外的错,比如找不到std库甚至编译直接报错。
# 找到并删除原有的boost库,如果没有可忽略find / -name libboost_system* -exec rm -rf {} \;mv /usr/include/boost /usr/include/boost _bak
编译安装
tar -zxvf boost_1_63_0.tar.gz -C /usr/local && cd /usr/local/boost_1_63_0./bootstrap.sh./b2./b2 headers install./b2 installcp -rf boost /usr/includecp -rf stage/lib/* /usr/lib# 刷新ld库ldconfig -v
安装zlib库
这个库很和谐,很快装完
tar xf zlib-1.2.11.tar.gz && cd zlib-1.2.11编译安装./configuremakemake install
升级openssl
这个是个玄学库,我原来系统是1.0.2k-fip,却仍然缺少必要组件,所以只好重新开始装
# 删除配置文件rm -rf /etc/ssl# 备份之前的openssl库和脚本,如果第一次安装,可以忽略本步骤mv /usr/bin/openssl /usr/bin/openssl_bakmv /usr/include/openssl /usr/include/openssl_bak# 安装openssltar xf openssl-1.0.2m.tar.gzcd openssl-1.0.2m/安装路径放在/usr/local/openssl./config shared zlib --prefix=/usr/local/opensslln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/opensslecho "/usr/local/openssl/lib/" >> /etc/ld.so.confldconfig -v
安装openssl-fips模块
tar xf openssl-fips-2.0.16.tar.gz && cd openssl-fips-2.0.16./config shared zlib --prefix=/usr/local/openssl --openssldir=/usr/local/opensslmake && make install./config -tmake dependldconfig -v# 查看是否成功ll /usr/include/openssl/ | grep fipopenssl verison -a# 如果成功,将目录加入/etc/profileecho "export OPENSSL_ROOT_DIR=/usr/local/openssl" >> /etc/profilesource /etc/profile
安装protobuf
rpc用的,很牛X
tar xf v3.5.0.tar.gzcd protobuf-3.5.0/执行,大概要一小时安装./autogen.sh./configuremakemake checkmake install查看是否成功protoc --version
编译
下载chainsql的github源码和chainsql最新release的源码。这里并不是打算两个都编译,而是github源码,有个文件夹里有有我要引用的.a文件,而release才是我们真正要编译的
mkdir software buildcd softwaregit clone https://github.com/ChainSQL/chainsqld.gitwget https://github.com/ChainSQL/chainsqld/archive/v1.0.2-pop.tar.gztar xf v1.0.2-pop.tar.gz# 进入build目录cd ../build
cmake生成makefile
cmake –Dtarget=gcc.release –DBOOST_ROOT=/usr/local/boost_1_63_0 你的chainsql release文件夹路径
修改默认链接文件
vim CmakeFiles/chainsqld.dir/link.txt# 将-pthread后面 /usr/…/libmysqlclient.换成刚刚说的chainsql github源码中Builds/Ubuntu/libmysqlclient.a,这就是我要链接的文件,其他都不用# 比如我的chainsqld github包路径是/home/wbc/chainsqld,则-pthread后路径替换为/home/wbc/chainsqld/Builds/Ubuntu/libmysqlclient.a
编译开始,在build目录下
make –j2
编译结束
在chainsql release新生成的build/gcc.release/目录下,有chainsqld脚本生成,则表示成功
