主页 > imtoken和比特派 > eos源码赏析(一):Ubuntu下eos代码编译
eos源码赏析(一):Ubuntu下eos代码编译
网上已经有很多关于btc的源码分析了。 由于eos主网上线还需要时间,而且网上关于eos的源码分析很少,所以我会尝试做一个系列文章,学习eos的源码,提高自己的能力阅读代码和理解新知识的能力。 阅读欣赏源码,先运行一下,看看长什么样子,这样心里才有底线,心里会踏实一些。 本文是该系列的第一篇文章。 Ubuntu下eos代码的编译是按照官网文档的指导完成的。
官方文档链接:
根据官方文档,eos代码只支持在Ubuntu 16.04及以上版本编译(推荐Ubuntu 16.10),本文在Ubuntu 16.04上实现。 在编译eos代码之前,我们首先要获取eos代码编译运行所需要的工具和库。 具体的获取方式可以在终端中输入以下命令来实现:
sudo apt-get 更新
wget -O -
sudo apt-get 安装 clang-4.0 lldb-4.0 libclang-4.0-dev cmake make
libbz2-dev libssl-dev libgmp3-dev
autotools-dev build-essential
libbz2-dev libicu-dev python-dev
autoconf libtool git
其中,LLVM是框架编译器(compiler)的框架体系,用C++编写btc源码分析,用于优化编译器(compile-time)、链接时(link-time)、运行时(run)用任何编程语言编写的程序。 -time)和空闲时间(idle-time),而Clang就是我们用来编译eos代码的编译器。 Eos代码严重依赖boost库,所以我们需要获取boost库,编译安装,并将boost库的相关信息添加到环境变量中。 上述步骤可以通过以下指令实现:
光盘~
wget -c '#39; -O boost_1.66.0.tar.bz2
tar xjf boost_1.66.0.tar.bz2
cdboost_1_66_0/
echo "export BOOST_ROOT=$HOME/boost_1_66_0">>~/.bash_profile
来源 ~/.bash_profile
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 安装
来源 ~/.bash_profile
如果觉得下载慢,也可以去boost官网下载对应版本(linux64位),然后按照上面的步骤解压、添加环境变量、编译、安装。
接下来,我们需要获取并安装 secp256k1-zkp。 具体来说,我们可以把它看成是一个加解密库。 具体的获取、编译、安装可以通过以下方式实现:
光盘~
混帐克隆
cdsecp256k1-zkp
./autogen.sh
。/配置
制作
须藤安装
同时,我们还需要 WASM 编译器。 由于llvm和clang中没有配置WASM,所以我们需要手动编译
mkdir ~/wasm-编译器
cd ~/wasm-编译器
git clone --depth 1 --single-branch --branch release_40
cdllvm/工具
git clone --depth 1 --single-branch --branch release_40
光盘..
mkdir 构建
光盘构建
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=发布 ../
使-j4安装
上面已经获取了eos代码编译需要的工具和依赖库。 确保完成以上步骤后,我们就可以编译运行一个eos节点了。 在编译之前,我们首先要从git上下载eos的源码。 由于eos代码有很多分支,我们可以加上--recursive得到完整的代码,如下:
git clone --recursive
拿到代码后,我们就可以编译eos了
光盘~
git clone --recursive
mkdir -p ~/eos/build && cd ~/eos/build
cmake -DBINARYEN_BIN=~/binaryen/bin -DWASM_ROOT=~/wasm-compiler/llvm -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
制作-j$(nproc)
编译后btc源码分析,我们可以在~/eos/build/programs路径下看到如下文件夹:
eosiod里面是服务器端区块链组件的相关文件。
eosioc包含区块链命令行界面的相关文件
eosio-launcher 包含网络节点的应用程序相关文件。
eosiowd 包含 eos 钱包相关文件。
现在我们 cd 到eosiod路径,我们可以执行eosiod。 执行过程中可能会报错。 如果没有报错,我们可以使用ctrl+c停止eosiod的运行。 这时候我们可以在eosiod文件夹中看到一个。 名为data-dir的文件夹,包含eosiod的相关配置信息。 打开 config.ini 并添加以下内容:
# 加载测试网创世状态,它使用默认密钥创建一些初始区块生产者
genesis-json = /path/to/eos/source/genesis.json
# 在陈旧的链上启用生产,因为单节点测试链几乎总是陈旧的
启用陈旧生产=真
# 启用测试网生产者的区块生产
生产者名称 = inita
生产者名称=initb
生产者名称=initc
生产者名称=initd
生产者名称=初始
生产者名称=initf
生产者名称=initg
生产者名称 = inith
生产者名称 = initi
生产者名称=initj
生产者名称=initk
生产者名称=initl
生产者名称=initm
生产者名称=initn
生产者名称= inito
生产者名称=initp
生产者名称=initq
生产者名称 = initr
生产者名称 = inits
生产者名称=initt
生产者名称 = initu
# 加载块生产者插件,这样你就可以生产块
插件 = eosio::producer_plugin
# 钱包插件
插件 = eosio::wallet_api_plugin
# 以及 API 和 HTTP 插件
插件 = eosio::chain_api_plugin
插件 = eosio::http_plugin
再次运行./eosiod,还是报错
原来是genesis.json文件的路径不对,所以我们可以使用Locate genesis找到本机genesis.json的路径,将路径添加到eos的编译配置文件中,如图下图:
再次运行eosiod,出现如下错误信息:
原来是提示我们在配置文件中enable-stale-production被使用了两次以上。 我们可以重新打开config.ini,把其中的enable-stale-production注释掉。
现在我们再次运行./eosiod,终于到了见证奇迹的时刻:
当你看到上图的时候,说明你的第一个eos节点已经在运行了,真是一波三折。
至此,我们完成了eos编译环境的搭建,eos编译工具的获取和安装,eos代码依赖库的获取和安装,在ubuntu16.04环境下eos代码的编译和运行。以官方文档的说明,并以eosiod为例进行简单说明,了解运行过程中出现的问题及解决方法,当然我们也可以打开config.ini查看eosiod相关的配置信息。
欢迎来到 EOSIO!