eos源碼編譯

編譯源碼 運行代碼 在阿里雲 紐約服務器上運行沒有出現任何問題。node

在其餘電腦上出現不少問題。
蒐集到的問題以下:
隨着EOSIO軟件愈來愈成熟,後來的開發者也愈來愈幸福。EOS相關源碼的編譯和運行變得異常簡單。並且官方提供了開發者文檔EOSIO Developer Portal
,可以幫助更好的理解和使用。不過文檔全面而細節不足,也缺乏一些問題狀況的處理。知易行難,上手試試吧。git

環境說明
本文測試過的編譯環境:
Ubuntu 16.04 LTS
Ubuntu 16.04.4 LTS
macOS High Sierra(10.13.3)github

源碼下載
本文撰寫時,最新的release爲v1.0.6shell

(1)下載代碼json

git clone https://github.com/EOSIO/eos --recursive
1
若是忘記使用「–recursive」,可在克隆下的eos目錄中執行ubuntu

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

git checkout v1.0.6
1
編譯
在eos目錄中,執行eosio_build.sh。
若是有好的***工具請提早配置好,執行下面的命令後,會檢查系統環境,下載所依賴的軟件工具。若有問題可看後面的問題彙總與處理。服務器

cd eos
./eosio_build.sh
1
2
比較順利的話,會看到以下的提示:網絡

使用Ubuntu比較順利,就是下載和編譯耗時,基本沒有啥問題。app

啓動節點
若是僅想搭建本地的單節點測試網,進入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數據等等。

相關文章
相關標籤/搜索