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数据等等。
eos源码编译的更多相关文章
- 1.EOS源码编译运行
目前网络上都是针对老版EOS2.0源码编译的文章,我在mac上参考这些文章编译,最后发现根本就不对,最新版本只需一条命令(./eosio_build.sh,依赖库会自动安装的)即可.我根据这些文章手动 ...
- Android 5.0源码编译问题
如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...
- Android stdio Apktool源码编译
Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...
- SSH/SSL 源码编译安装简易操作说明
环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- World Wind .NET源码编译问题处理
World Wind .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...
- 源码编译安装 MySQL 5.5.x 实践
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
- Linux 安装node.js ---- 源码编译的方式
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...
- 烂泥:mysql5.5数据库cmake源码编译安装
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...
随机推荐
- php 添加 redis 扩展
Windows下PHP安装Redis扩展的具体步骤方法 下面我们就结合详细的图文,给大家介绍Windows下PHP安装Redis扩展的方法: 首先我们打开这个上面给出的下载链接地址,界面如下: 这里我 ...
- 20145203盖泽双java实验三 敏捷开发与XP实践
java实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> ...
- mysql报错:/usr/sbin/mysqld:unknown variable 'default-character-set=utf8'
修改mysql的字符集时,为了将默认字符集设置为utf-8,便将/etc/my.cnf下[mysqld]加了一行 default-character-set=utf8, 但是在下次启动系统的时候,my ...
- Python自动化之迭代器不能在迭代的时候更改值
除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上.在迭代字典的 key 时, ...
- Google免费GPU使用教程(Google Colab Colaboratory)
参考: https://www.234du.com/1154.html https://mp.weixin.qq.com/s/TGTToLYSQJui94-bQC4HIQ 注册gmail时遇到手机号无 ...
- 创建ROS工程結構
图像化显示目录工程结构:tree $ sudo apt install tree 1.创建ROS工作空间 $ mkdir -p catkin_ws/src # Create mutil-level d ...
- 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:
(1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化. (2)Point2D有一个void型成员方法offs ...
- vue-cli代理开发
如何设置接口代理? 一.找到config文件下的index.js 二.找到dev里面的proxyTable他的值就是一个{},这里为了方便配置配置文件单独写成一个文件 dev: { env: requ ...
- 【转】CSDN离线网页html文件自动跳转
问题: 最近使用OneNote2016剪辑csdn的文章时,发现一些公式/文本框不能被正确识别,所以离线保存网页的html文件. 但是每次打开html文件,都会自动跳转的CSDN主页,即使断网,也会自 ...
- SAP RANG语法
Range 和select-option 的变量是差不多的 sign = 'I' 或 sign = 'E' 是指INCLUED 和 EXCLUDE OPTION = 'EQ' 或其他操作符.. LO ...