Edited at

centos7でbitcoin cash 0.16をコンパイルする

More than 1 year has passed since last update.

0.17においてはコンパイルエラーは修正されていますのでパッチは必要ないです。

gcc7、boostのバージョン、コンパイルエラーがあって罠だらけなのでメモっておきます

yum install "@Development Tools" centos-release-scl epel-release

yum install python-devel openssl-devel libevent-devel libdb-cxx libdb-cxx-devel zlib zlib-devel bzip2-libs bzip2-devel lz4 lz4-devel cmake make devtoolset-7

curl https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 > /tmp/boost_1_66_0.tar.bz2

tar jxvf /tmp/boost_1_66_0.tar.bz2
cd /tmp/boost_1_66_0
scl enable devtoolset-7 "./bootstrap.sh"
scl enable devtoolset-7 "./b2 -j 2 install --prefix=/usr/local"

boostがstatic buildではない場合はldconfig必須

ソースコードのパッチを当てる


src/miner.h

--- ../src/miner.h      2017-12-30 18:31:55.000000000 +0000

+++ ./miner.h 2018-03-09 09:29:44.084040666 +0000
@@ -71,7 +71,7 @@
// TODO: refactor to avoid duplication of this logic.
struct CompareModifiedEntry {
bool operator()(const CTxMemPoolModifiedEntry &a,
- const CTxMemPoolModifiedEntry &b) {
+ const CTxMemPoolModifiedEntry &b) const {
double f1 = double(b.nSizeWithAncestors *
a.nModFeesWithAncestors.GetSatoshis());
double f2 = double(a.nSizeWithAncestors *


src/txmempool.h

--- ../src/txmempool.h  2017-12-30 18:31:55.000000000 +0000

+++ ./txmempool.h 2018-03-09 09:29:49.255970379 +0000
@@ -245,7 +245,7 @@
*/
class CompareTxMemPoolEntryByDescendantScore {
public:
- bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) {
+ bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) const {
bool fUseADescendants = UseDescendantScore(a);
bool fUseBDescendants = UseDescendantScore(b);

@@ -272,7 +272,7 @@
}

// Calculate which score to use for an entry (avoiding division).
- bool UseDescendantScore(const CTxMemPoolEntry &a) {
+ bool UseDescendantScore(const CTxMemPoolEntry &a) const {
double f1 = double(a.GetSizeWithDescendants() *
a.GetModifiedFee().GetSatoshis());
double f2 =
@@ -287,7 +287,7 @@
*/
class CompareTxMemPoolEntryByScore {
public:
- bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) {
+ bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) const {
double f1 = double(b.GetTxSize() * a.GetModifiedFee().GetSatoshis());
double f2 = double(a.GetTxSize() * b.GetModifiedFee().GetSatoshis());
if (f1 == f2) {
@@ -299,14 +299,14 @@

class CompareTxMemPoolEntryByEntryTime {
public:
- bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) {
+ bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) const {
return a.GetTime() < b.GetTime();
}
};

class CompareTxMemPoolEntryByAncestorFee {
public:
- bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) {
+ bool operator()(const CTxMemPoolEntry &a, const CTxMemPoolEntry &b) const {
double aFees = double(a.GetModFeesWithAncestors().GetSatoshis());
double aSize = a.GetSizeWithAncestors();


issueには上がっているが直す気がないみたいなので。

プルリクはおくらずここにメモっておく。

https://github.com/Bitcoin-ABC/bitcoin-abc/issues/173

scl enable devtoolset-7 "./autogen.sh"

scl enable devtoolset-7 "./configure --disable-wallet --program-transform-name=s/bitcoin/bitcoincash/g"
scl enable devtoolset-7 "make -j 2"
scl enable devtoolset-7 "make install"