鍍金池/ 問答/C++  Linux/ btcpool源碼編譯出錯

btcpool源碼編譯出錯

下載了btcpool源碼,想要在ubuntu16.04上面運(yùn)行,可是編譯不過~!

clipboard.png
難到源碼真的有問題嗎?有沒有人碰到過此問題?
有誰有成功編譯btcpool源碼的經(jīng)驗?

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

下面是我的詳細(xì)編譯過程:

在編譯btcpool之前,一定要先下載安裝bitcoin的源碼
新建目錄~/work/bitcoin 并進(jìn)入,下載bitcoin的源碼。

git clone https://github.com/bitcoin/bitcoin.git

安裝此源碼可能會報錯,先做如下操作

sudo apt-get install libdb5.1++-dev
運(yùn)行./autogen.sh
運(yùn)行./configure --with-incompatible-bdb
然后再make , make install

新建目錄~/work/code/并進(jìn)入,下載btcpool源碼

git clone https://github.com/btccom/btcpool.git

解壓源碼,進(jìn)入根目錄下面的install目錄,運(yùn)行install_btcpool.sh

sudo bash install_btcpool.sh

運(yùn)行會報錯,之后不要再次運(yùn)行此腳本

進(jìn)入btcpool-master的根目錄,如果沒有build目錄則創(chuàng)建之,進(jìn)入,運(yùn)行cmake命令
注意:直接用cmake會出錯,因為CMakeLists.txt里面有兩個變量(CHAIN_TYPE, CHAIN_SRC_ROOT)需要定義,可以在CMakeLists.txt里面寫死其定義

set(CHAIN_TYPE "BTC")
set(CHAIN_SRC_ROOT "/home/zc/work/bitcoin/bitcoin-master")

也可以在執(zhí)行cmake時加入到參數(shù)里面(CHAIN_SRC_ROOT的地址是bitcoin源碼的本地的地址)

cmake -DCHAIN_TYPE=BTC -DCHAIN_SRC_ROOT=/home/zc/work/bitcoin/bitcoin-master ..

然后make,可是出錯了:

/home/zc/work/code/btcpool-master/src/Stratum.h:290:26: error: ‘CTxDestination’ does not name a type
                    const CTxDestination &poolPayoutAddr,
                          ^
In file included from /home/zc/work/code/btcpool-master/src/JobMaker.cc:24:0:
/home/zc/work/code/btcpool-master/src/JobMaker.h:65:3: error: ‘CTxDestination’ does not name a type
   CTxDestination poolPayoutAddr_;
   ^
/home/zc/work/code/btcpool-master/src/JobMaker.cc: In member function ‘bool JobMaker::init()’:
/home/zc/work/code/btcpool-master/src/JobMaker.cc:88:51: error: ‘IsValidDestinationString’ was not declared in this scope
   if (!IsValidDestinationString(poolPayoutAddrStr_)) {
                                                   ^
/home/zc/work/code/btcpool-master/src/JobMaker.cc:93:3: error: ‘poolPayoutAddr_’ was not declared in this scope
   poolPayoutAddr_ = DecodeDestination(poolPayoutAddrStr_);
   ^
/home/zc/work/code/btcpool-master/src/JobMaker.cc:93:57: error: ‘DecodeDestination’ was not declared in this scope
   poolPayoutAddr_ = DecodeDestination(poolPayoutAddrStr_);
                                                         ^
/home/zc/work/code/btcpool-master/src/JobMaker.cc: In member function ‘void JobMaker::sendStratumJob(const char*)’:
/home/zc/work/code/btcpool-master/src/JobMaker.cc:562:49: error: ‘poolPayoutAddr_’ was not declared in this scope
   if (!sjob.initFromGbt(gbt, poolCoinbaseInfo_, poolPayoutAddr_, blockVersion_,

難道源碼有問題嗎?此問題還待解決....

回答
編輯回答
舊時光

源碼沒有問題,你只需要按照文檔操作便可編譯成功。

以 Ubuntu 16.04 LTS 為例,主要參考文檔(均來自項目源碼)如下

  1. bitcoin-0.16.0rc1/doc/build-unix.md
  2. btcpool/docs/INSTALL-BTCPool.md

下面是一鍵安裝 btc-pool 腳本,主要參考上述文檔,已測

#!/bin/bash
# 一鍵安裝 btc-pool
#
# OS: Ubuntu 16.04 LTS
# @author 李毅
set -e

build_dir=/tmp

# 由 jarven 測試提供,https://segmentfault.com/q/1010000014060045?_ea=3538159
#   不需要兼容舊版 bitcoin,及不需要錢包功能的時候,可以使用系統(tǒng)默認(rèn)的 libdb-dev
#   及 libdb++-dev 庫,請把下一行的 false 改成 true。
use_latest_libdb=false

cpus=`grep -Ee 'processor\s:' /proc/cpuinfo | wc -l`


# 禁止 root 用戶運(yùn)行此腳本
#=========================
if [ "$UID" -eq 0 ] ; then
    echo "禁止 root 用戶運(yùn)行此腳本"
    exit 1
fi


# 創(chuàng)建臨時目錄
#=============
[ -d $build_dir ] || mkdir -p $build_dir


# 安裝系統(tǒng)必要組件
#==================

# aptitude
if ! which aptitude >/dev/null 2>&1 ; then
    sudo apt-get update
    sudo apt-get install -y aptitude
fi

# 安裝 libboost-all-dev 需要人工干預(yù)
if ! aptitude show libboost-all-dev > /dev/null 2>&1 ; then
    echo ""
    echo "!!! 安裝 libboost-all-dev 需要人工干預(yù),以降級某些依賴項的版本 !!!"
    echo "<1> 第一次詢問時按下 'n' 鍵"
    echo "<2> 第二次詢問時按下 'y' 鍵"
    aptitude install libboost-all-dev
fi

#
sudo aptitude install -y \
    build-essential autotools-dev libtool autoconf automake pkg-config cmake \
    openssl libssl-dev libcurl4-openssl-dev libconfig++-dev \
    libgmp-dev libmysqlclient-dev libzookeeper-mt-dev \
    libzmq3-dev libgoogle-glog-dev libevent-dev


# 編譯安裝 librdkafka-v0.9.1
#===========================
if ! pkg-config --libs rdkafka ; then
    sudo aptitude install -y zlib1g zlib1g-dev python
    cd $build_dir
    if [ ! -f librdkafka-0.9.1.tar.gz ]; then
        wget -O librdkafka-0.9.1.tar.gz https://github.com/edenhill/librdkafka/archive/0.9.1.tar.gz
        tar zxvf librdkafka-0.9.1.tar.gz
    fi
    cd librdkafka-0.9.1
    make clean
    ./configure
    make
    sudo make install
fi


# 編譯 biticoin
#==============
sudo aptitude install -y \
    build-essential libtool autotools-dev automake pkg-config libssl-dev \
    libevent-dev bsdmainutils python3

if [ "$use_latest_libdb" = true ]; then
    sudo aptitude install -y libdb-dev libdb++-dev
else if ! aptitude show libdb4.8++-dev >/dev/null 2>&1 ; then
    # 安裝低版 libdb4.8
    sudo apt-get install -y software-properties-common
    sudo add-apt-repository -y ppa:bitcoin/bitcoin
    sudo apt-get update
    sudo apt-get install -y libdb4.8-dev libdb4.8++-dev
fi

cd $build_dir
if [ ! -f bitcoin-0.16.0rc1.tar.gz ]; then
    wget -O bitcoin-0.16.0rc1.tar.gz https://github.com/bitcoin/bitcoin/archive/v0.16.0rc1.tar.gz
    tar zxf bitcoin-0.16.0rc1.tar.gz
fi
cd $build_dir/bitcoin-0.16.0rc1
./autogen.sh

if [ "$use_latest_libdb" = true ]; then
    ./configure --with-incompatible-bdb --disable-wallet
else
    ./configure
fi
make -j $cpus


# 編譯 btcpool
#=============
cd $build_dir
if [ ! -d btcpool ]; then
    git clone https://github.com/btccom/btcpool.git
fi
cd $build_dir/btcpool
[ ! -d build ] && mkdir build
cd build

# Release build
cmake -DCHAIN_TYPE=BTC -DCHAIN_SRC_ROOT=$build_dir/bitcoin-0.16.0rc1 ..
make -j $cpus

若有問題,請隨時留言。

2018年1月30日 23:24