2015年12月13日日曜日

Linux版 Bitzenyのビルドが失敗する

今使っているVPSのCPUがSSE4.1に対応していなかったので, githubからBitzenyのソースコードをダウンロードして, 自分でビルドすることにしました.

「Build bitzenyd on Ubuntu 14.04」に書いてある手順をそのまま踏めば大丈夫です. 以下のコマンドはGithubのREADMEからの引用です.

sudo apt-get install build-essential
sudo apt-get install libtool autotools-dev autoconf
sudo apt-get install libssl-dev
sudo apt-get install libboost-all-dev
sudo apt-get install pkg-config
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev
sudo apt-get install libdb4.8++-dev

git clone https://github.com/bitzeny/bitzeny.git
cd bitzeny
./autogen.sh
./configure --without-miniupnpc --without-gui --disable-tests
make

順番にコマンドを打っていけば簡単にインストールでき…ませんでした.

In file included from /usr/include/boost/move/detail/type_traits.hpp:34:0,
                 from /usr/include/boost/move/core.hpp:54,
                 from /usr/include/boost/move/utility_core.hpp:29,
                 from /usr/include/boost/move/utility.hpp:28,
                 from /usr/include/boost/thread/detail/move.hpp:27,
                 from /usr/include/boost/thread/lock_types.hpp:11,
                 from /usr/include/boost/thread/pthread/mutex.hpp:16,
                 from /usr/include/boost/thread/mutex.hpp:16,
                 from ./allocators.h:13,
                 from ./key.h:9,
                 from ./script/script.h:9,
                 from script/compressor.h:9,
                 from core.h:10,
                 from chainparams.h:9,
                 from base58.h:17,
                 from rpcrawtransaction.cpp:6:
/usr/include/boost/variant/get.hpp: In instantiation of ‘typename boost::add_reference::type boost::strict_get(boost::variant&) [with U = const CScriptID&; T0 = CNoDestination; T1 = CKeyID; T2 = CScriptID; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_; typename boost::add_reference::type = const CScriptID&]’:
/usr/include/boost/variant/get.hpp:284:25:   required from ‘typename boost::add_reference::type boost::get(boost::variant&) [with U = const CScriptID&; T0 = CNoDestination; T1 = CKeyID; T2 = CScriptID; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_; typename boost::add_reference::type = const CScriptID&]’
rpcrawtransaction.cpp:290:77:   required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE’
     BOOST_STATIC_ASSERT_MSG(
     ^
Makefile:3222: recipe for target 'libbitcoin_server_a-rpcrawtransaction.o' failed
make[1]: *** [libbitcoin_server_a-rpcrawtransaction.o] Error 1
make[1]: Leaving directory '/home/hogehoge/bit/bitzeny-master/src'
Makefile:564: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
makeコマンドを実行するとこんなエラーが出てしまってビルドできないです.
調べてみたら「wallet: fix boost::get usage with boost 1.58 #6076」こんなの見つけました.
Bitcoinの方はIssueが投げられてて修正したコミットもマージされてるんですが, Bitzenyの方は修正されていないので, ビルドに失敗するみたいです.
まったくソース見てないのに当てずっぽうで修正するのはなんともアレですが, とりあえずこのコミットの通りにソースを修正してみます.

src/rpcrawtransaction.cppの299行目に以下の様な記述があると思います. もし299行目になかったらCScriptとかで検索してそれっぽい箇所を探してください.

const CScriptID& hash = boost::get<const CScriptID&>(address);
これを

const CScriptID& hash = boost::get<CScriptID>(address);
こう書き換える.

あとはまたmakeを走らせて, コンパイルが終わるのを待つだけです.

これで無事ビルドが成功しました. なんでBitzenyでは修正されてないんだろ…

0 件のコメント:

コメントを投稿