CentOS 7下EOS编译

作者: 海蓝德 | 来源:发表于2018-01-30 21:21 被阅读138次

临近EOS主网上线,为了尽快体验学习下一代区块链EOS的魅力,自己也要在测试环境中部署一个实例进行验证。目前在EOS Github的官网上已经有基于Ubuntu及MacOS的版本的部署指导及自动化脚本。

但实际研发人员用的环境还是比较多样化的,在生产集群中更多的用的是CentOS系统。由于编译环境差别比较大,走了不少弯路,今天记录一下怎么在一个纯净CentOS 7.4主机上编译EOS节点的过程以及我遇到的那些坑,以供后人绕行。

1. 硬件环境准备

由于需要源码编译LLVM WebAssembly,主机编译目录下至少需要有10GB空闲可用空间,内存不低于16 GB,CPU核数,越多越好。

2. 基本编译环境安装

根据EOS.IO的官网介绍,该项目主要是使用 C++14版本进行编译,而CentOS 7仓库中默认带的编译器版本是4.8.5,不支持该标准,同时CMake版本也较低,无法支持依赖库的编译,因此本次在开始编译前需要先安装相关新版的编译工具链及相关环境。

export BUILD_TEMP=${HOME}/tmp
mkdir ${BUILD_TEMP}

##GNU C++ 6.3.1
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-6

##CMake 3.10.2

export BUILD_TEMP=${HOME}/tmp
mkdir ${BUILD_TEMP}

cd  ${BUILD_TEMP}
mkdir ${HOME}/opt
curl -L https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz -o cmake-3.10.2-Linux-x86_64.tar.gz
tar -zxf cmake-3.10.2-Linux-x86_64.tar.gz -C ${HOME}/opt

export PATH=$PATH:/opt/rh/devtoolset-6/root/bin/:${HOME}/opt/cmake-3.10.2-Linux-x86_64/bin/

##Other compile tool chain
sudo yum install -y git autoconf automake libtool doxygen ocaml  gmp-devel python-devel bzip2-devel openssl-devel libicu-devel bzip2 wget

3. EOS依赖环境编译

根据官网描述,EOS.IO的主要第三方依赖环境如下

  • Boost 1.64
  • secp256k1-zkp
  • Binaryen
  • LLVM 4.0 with WebAssembly(在实际编译中,X86的Target也需要安装编译)

3.1. Boost编译

export BOOST_ROOT=${HOME}/opt/boost_1_64_0
cd  ${BUILD_TEMP}
curl -L https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.bz2 > boost_1.64.0.tar.bz2
tar xvf boost_1.64.0.tar.bz2
cd boost_1_64_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install

3.2. secp256k1-zkp编译

cd  ${BUILD_TEMP}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh && ./configure
make
sudo make install

3.3. Binaryen编译

cd  ${BUILD_TEMP}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make -j 4
sudo make install

3.4. LLVM WebAssembly+ Host Target

  • 坑一 DLLVM_TARGETS_TO_BUILD
    在这里需要特定说明一下,由于EOS需要LLVM在本地换进中将C++编译为WebAssembly在虚拟机中运行,因此对于LLVM编译器需要同时支持X86(本地换进)和WebAssembly两个Target进行编译。
    在官方给出的编译脚本中,由于在Ubuntu环境中已经安装了基于LLVM的clang,所以对Cmake的DLLVM_TARGETS_TO_BUILD设置为""。但在CentOS中由于没有安装这个编译器,这将会导致在后续EOS编译时C++编译器报错缺失LLVMX86****.so文件,在这里我们需要指定DLLVM_TARGETS_TO_BUILD='host',与主机相同。
  • 坑二 LLVM的版本
    目前官方的EOS目前只支持4.0版本的llvm编译器,在Clone Github库时,一定要选择branch 40。直接clone最新版本,会在最后EOS编译时报llvm版本不支持的错误。
  • 坑三 RTTI没有开启
    在官方的编译安装脚本中,不不知道为什么没有开启LLVM_ENABLE_RTTI,这个会导致在后面编译EOS时遇到莫名其妙的typeof ** undefine的错误,LLVM的默认编译配置中也没有开启,因此在我们自己编译的时候,一定要加上这个选项DLLVM_ENABLE_RTTI=ON,雪的教训啊~
cd  ${BUILD_TEMP}

mkdir ${BUILD_TEMP}/wasm-compiler/build -p
cd ${BUILD_TEMP}/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ${BUILD_TEMP}/wasm-compiler/build
cmake -G "Unix Makefiles" -DLLVM_ENABLE_RTTI=ON -DLLVM_TARGETS_TO_BUILD='host' -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../llvm
sudo make -j4 install

export WASM_LLVM_CONFIG=/usr/local/bin/llvm-config

4. EOS编译

如果到这一步均顺利完成,现在可以编译EOS了

cd ${BUILD_TEMP}
git clone https://github.com/eosio/eos --recursive
mkdir -p ${BUILD_TEMP}/eos/build && cd ${BUILD_TEMP}/eos/build
cmake -DBOOST_INCLUDEDIR=${BOOST_ROOT}/include/boost \
-DBOOST_LIBRARYDIR=${BOOST_ROOT}/lib  ..
make -j4

5. 运行你的第一个EOS节点!

请参考官方文档Creating and launching a single-node testnet,我就不罗嗦了。


请打赏一个可怜的攻城狮,ETH捐助地址0x2255b6221479ED4d451914cA7acb2D01ee2ef101

相关文章

  • 2018-11-16 eos节点搭建

    # EOS开发入门到精通 ### 初始环境设置: 官方参考文档: centos环境(阿里云美国硅谷服务器 编译过程...

  • CentOS 7下EOS编译

    临近EOS主网上线,为了尽快体验学习下一代区块链EOS的魅力,自己也要在测试环境中部署一个实例进行验证。目前在EO...

  • EOS项目编译及操作入门

    本次EOS项目编译操作是在mac上安装的的centos7进行的,可能是虚拟机的问题,本次编译时间较长。下面是本次操...

  • eos节点搭建

    eos源码编译与个人节点启动 mkdir eos git clone https://github.com/EOS...

  • ubuntu16.04运行EOS3.0

    上文《ubuntu16.04编译eos3.0》已编译好了EOS的程序 一 运行nodeos用于同步区块节点程序 -...

  • 2019-11-12

    eos主网节点搭建 (不编译源码)Eos主网节点搭建 https://github.com/EOSIO/eos官...

  • 自己动手编译OpenJDK

    Linux下 编译 Centos 下编译OpenJDK Mac下编译 MacOS 下编译OpenJDK Windo...

  • centos7下安装HAWQ

    曾经多次尝试是在centos环境下对源码进行编译安装,发现在centos环境下编译HAWQ源码存在着各种编译问题,...

  • fatal error: 'eosiolib/eosio.hpp

    新版的EOS,安装后,合约编译出现找不到h文件的错误。 eos编译成功以后eosiocpp存在与两个地方。 1, ...

  • CentOS 7 升级gcc/g++编译器

    CentOS 7 升级gcc/g++编译器参考链接:CentOS 7 升级gcc/g++编译器[https://b...

网友评论

    本文标题:CentOS 7下EOS编译

    本文链接:https://www.haomeiwen.com/subject/xbdzaxtx.html