距离上次部署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
最后若看到,如下结果,则编译成功:
遇到问题:
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.(这个问题折磨了几个小时:))