• eos源码编译


    编译源码 运行代码 在阿里云 纽约服务器上运行没有出现任何问题。

    在其他电脑上出现很多问题。
    搜集到的问题如下:
    随着EOSIO软件越来越成熟,后来的开发者也越来越幸福。EOS相关源码的编译和运行变得异常简单。而且官方提供了开发者文档EOSIO Developer Portal
    ,能够帮助更好的理解和使用。不过文档全面而细节不足,也缺少一些问题情况的处理。知易行难,上手试试吧。

    环境说明
    本文测试过的编译环境:
    Ubuntu 16.04 LTS
    Ubuntu 16.04.4 LTS
    macOS High Sierra(10.13.3)

    源码下载
    本文撰写时,最新的release为v1.0.6

    (1)下载代码

    git clone https://github.com/EOSIO/eos --recursive
    1
    如果忘记使用“–recursive”,可在克隆下的eos目录中执行

    git submodule update --init --recursive
    1
    (2)切换到v1.0.6

    git checkout v1.0.6
    1
    编译
    在eos目录中,执行eosio_build.sh。
    如果有好的科学上网工具请提前配置好,执行下面的命令后,会检查系统环境,下载所依赖的软件工具。如有问题可看后面的问题汇总与处理。

    cd eos
    ./eosio_build.sh
    1
    2
    比较顺利的话,会看到如下的提示:

    使用Ubuntu比较顺利,就是下载和编译耗时,基本没有啥问题。

    启动节点
    如果仅想搭建本地的单节点测试网,进入eos的build目录,执行sudo make install。像我这样自己同步主网、测试网,外加自己单节点测试的,暂时先不执行install了,避免混乱,而是在build各个目录里面执行。
    这里先说明单节点测试情况

    cd build/programs/nodeos
    ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
    1
    2
    看到如下信息说明已经开始生产块了

    查看网络信息
    既然已经开始生产块了,那另起一个shell终端,执行cleos查看当前网络信息

    cd build/programs/cleos
    ./cleos get info
    1
    2
    看到如下网络信息:

    {
    "server_version": "79651199",
    "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "head_block_num": 20,
    "last_irreversible_block_num": 19,
    "last_irreversible_block_id": "000000138960dec18c0daf35042fc8a180e884241cd5827335206a441992fa86",
    "head_block_id": "00000014ef94b3c0b066454bec196c8c4f1ac4115c8c9cd43294fc0e2ea596cd",
    "head_block_time": "2018-06-22T23:57:02.000",
    "head_block_producer": "eosio",
    "virtual_block_cpu_limit": 203830,
    "virtual_block_net_limit": 1068689,
    "block_cpu_limit": 199900,
    "block_net_limit": 1048576
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    好了,可以开始你的各种测试了,测试命令参考官网cleos reference
    生成的块和配置信息默认在如下目录:
    Mac OS: ~/Library/Application Support/eosio/nodeos/
    Linux: ~/.local/share/eosio/nodeos/

    简单理解下单节点网络
    借用官网图:

    eos的build目录里生成的可执行程序很多,常用到的:

    nodeos :通过配置不同插件,启动节点,同步EOS网络数据或者自己生成块,也可作为API节点供调用
    keosd:管理钱包,钱包中包含EOS公私钥对信息
    cleos:命令行交互接口,连接钱包与EOS网络,执行查看网络信息,推送交易信息,部署智能合约等
    eosiocpp:编译智能合约,生成wasm文件及abi文件

    各种问题
    在阿里云服务器的Ubuntu上编译最顺利,几乎没有遇到任何问题;Mac OS上问题多些。编译时会下载需要的文件,如果中断,按照提示删除未完成的目录重新编译即可。其他问题列举如下:

    1.内存空间不足
    遇到Your system must have 7 or more Gigabytes of physical memory installed
    执行eosio_build.sh时,会检查系统内存至少7G,修改script下对应系统的脚本即可。scripts/eosio_build_ubuntu.sh的diff如下:

    •   if [ "${MEM_MEG}" -lt 7000 ]; then
      
    •   if [ "${MEM_MEG}" -lt 3000 ]; then
                printf "\tYour system must have 7 or more Gigabytes of physical memory installed.\n"
                printf "\tExiting now.\n"
                exit 1
      

    1
    2
    3
    4
    5
    下面是Mac OS上的问题
    2.无法找到已安装的llvm路径

    CMake Error at libraries/wasm-jit/Source/Runtime/CMakeLists.txt:26 (find_package):
    Could not find a package configuration file provided by "LLVM" (requested
    version 4.0) with any of the following names:
    1
    2
    3
    参考https://github.com/EOSIO/eos/issues/43
    根据提示找到llvm 4.0的路径,可利用tab在此路径下查找
    ll /usr/local/Cellar/llvm/4.
    然后通过export到环境变量中
    export LLVM_DIR=/usr/local/Cellar/llvm/4.0.0_1/lib/cmake

    3.Failed to find Gettext libintl

    CMake Error at /Applications/CMake.app/Contents/share/cmake-3.11/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
    Failed to find Gettext libintl (missing: Intl_INCLUDE_DIR)
    Call Stack (most recent call first):
    /Applications/CMake.app/Contents/share/cmake-3.11/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
    /Applications/CMake.app/Contents/share/cmake-3.11/Modules/FindIntl.cmake:47 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
    programs/cleos/CMakeLists.txt:29 (find_package)
    1
    2
    3
    4
    5
    6
    参考https://github.com/EOSIO/eos/issues/2174
    执行brew link gettext –force

    顺便补充万一测试个hello world的智能合约,发现编译有问题
    4.无法找到依赖的头文件及库

    hello.cpp:1:10: fatal error: 'eosiolib/eosio.hpp' file not found

    include <eosiolib/eosio.hpp>

         ^~~~~~~~~~~~~~~~~~~~
    

    1 error generated.
    1
    2
    3
    4
    简单的是在eos源码下编译后的build目录中,执行sudo make install后即可。

    后续再写如何连接EOS主网,JungleTestnet测试网络及如何配置节点等信息,比如genesis.json,block数据等等。

  • 相关阅读:
    1697 ⑨要写信
    1220 数字三角形
    4979 数塔
    bzoj1618[Usaco2008 Nov]Buying Hay 购买干草
    bzoj1066[SCOI2007]蜥蜴
    bzoj1008[HNOI2008]越狱
    cf437D The Child and Zoo
    cf437C The Child and Toy
    cf437B The Child and Set
    cf437A The Child and Homework
  • 原文地址:https://www.cnblogs.com/xiaocongcong888/p/9894738.html
Copyright © 2020-2023  润新知