最新EOS源代码(v1.7.3)及 系统合约编译(v1.6.0) 踩坑记

距离上次部署EOS 过去半年多,EOS代码已作了几次大更新,如重写了系统合约,并且独立出来单独编译等。

(注意:本文开发环境是 Vmware ws 12 + Ubuntu16.04  64bit)

一.编译EOS

1.注意有坑

  虚拟机空闲硬盘要大于20G ;

  物理主机的CPU核数要大于4,在vmare给虚拟机设置CPU个数 要大于1,否则编译系统合约 卡在某处不动!

2. 从github 拉最新代码:

# git clone https://github.com/EOSIO/eos --recursive  (为什么要加 --recursive, 自己去搜下)

#  cd eos 

运行下面编译脚本,注意eosio_build.sh  已经搬到 scripts目录下:

#  ./scripts/eosio_build.sh 

最后若看到,如下结果,则编译成功:

最新EOS源代码(v1.7.3)及 系统合约编译(v1.6.0) 踩坑记_第1张图片

遇到问题:

boost库安装失败:

Checking Boost library (1_67_0) installation...
Installing Boost library...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (5) Could not resolve proxy: jf
curl: (5) Could not resolve proxy: jf
curl: (5) Could not resolve proxy: jf
 

打开脚本eosio_build_ubuntu.sh (要根据自己的操作系统,选择对应脚本),找下面行:

BOOSTVERSION=$( grep "#define BOOST_VERSION" "$HOME/opt/boost/include/boost/version.hpp" 2>/dev/null | tail -1 | tr -s ' ' | cut -d\  -f3 )
if [ "${BOOSTVERSION}" != "${BOOST_VERSION_MAJOR}0${BOOST_VERSION_MINOR}0${BOOST_VERSION_PATCH}" ]; then
        printf "Installing Boost library...\\n"
        curl -LO https://dl.bintray.com/boostorg/release/${BOOST_VERSION_MAJOR}.${BOOST_VERSION_MINOR}.${BOOST_VERSION_PATCH}/source/boost_$BOOST_VERSION.tar.bz2 \
        tar -xjf boost_$BOOST_VERSION.tar.bz2 \
        && cd $BOOST_ROOT \
        && ./bootstrap.sh --prefix=$BOOST_ROOT \
        && ./b2 -q -j"${JOBS}" install \
        && cd .. \
        && rm -f boost_$BOOST_VERSION.tar.bz2 \
        && rm -rf $BOOST_LINK_LOCATION \
        && ln -s $BOOST_ROOT $BOOST_LINK_LOCATION \
        || exit 1

然后手动下载,解压,对上面脚本有些语句需要 注释掉,然后再运行 eosio_build.sh 继续执行。

此时要到的boost版本是 1.67.0, 通过下面连接下载:

 curl -LO https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2

其他第三方库,若报错,类似处理即可。

3. 编译成功后,记得运行安装程序,编译系统合约需要EOS环境:

#./scripts/eosio_install.sh
 

二.编译eosio.contracts系统合约

1. 注意 当前 eosio.contracts 对 eosio.cdt 有版本限制 只能是 1.5.x, 不要用最新!

2. 注意必须先安装 https://github.com/EOSIO/eosio.cdt ,参见里面的二进制包安装方式。

3. 注意 上面的eos代码编译成功,并且安装!

4. 从 https://github.com/EOSIO/eosio.contracts 拉取 eosio.contracts代码

5. cd eosio.contracts ,执行下面命令编译:

#./build.sh

 编译系统合约遇到问题:

 1.libstdc++.so.6: version `GLIBCXX_3.4.22' not found  

   解决办法: sudo apt-get install libstdc++6 ,若成功,使用下面命令将查看到 GLIBCXX_3.4.22。

gavin@ubuntu:~$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 |grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH
折腾了几次,包括尝试 https://github.com/lhelontra/tensorflow-on-arm/issues/13 里面几种方法,最后搞定。

2.  在 Link处, 卡住不动(stuck)

把虚拟机的CPU配置 改为2,核也改为2,重新编译OK.(这个问题折磨了几个小时:))

 

  

你可能感兴趣的:(最新EOS源代码(v1.7.3)及 系统合约编译(v1.6.0) 踩坑记)