mvs-org / metaverse

The Metaverse individual chain service ETP coin and immutable data space for Hyperspace.
https://mvs.org
GNU Affero General Public License v3.0
307 stars 115 forks source link

Building problem on Centos7.3 error: invalid initialization of non-const reference of type ‘libbitcoin::threadpool&’ from an rvalue of type ‘<brace-enclosed initializer list>’ #284

Open vorapoap opened 6 years ago

vorapoap commented 6 years ago

CentOS Linux release 7.3.1611 (Core) Following build instruction on this github.

Get this error

Linking CXX static library ../../../lib/libmvs_bitcoin.a
cd /home/vorapoap/metaverse/metaverse/build/src/lib/bitcoin && /usr/bin/cmake -P CMakeFiles/bitcoin_static.dir/cmake_clean_target.cmake
cd /home/vorapoap/metaverse/metaverse/build/src/lib/bitcoin && /usr/bin/cmake -E cmake_link_script CMakeFiles/bitcoin_static.dir/link.txt --verbose=1
/usr/bin/ar cr ../../../lib/libmvs_bitcoin.a  CMakeFiles/bitcoin_static.dir/chain/attachment/account/account.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/account/account_address.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/asset/asset.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/asset/asset_detail.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/asset/asset_transfer.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/asset/blockchain_asset.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/attachment.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/etp/etp.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/etp/etp_award.cpp.o CMakeFiles/bitcoin_static.dir/chain/attachment/message/message.cpp.o CMakeFiles/bitcoin_static.dir/chain/block.cpp.o CMakeFiles/bitcoin_static.dir/chain/business_data.cpp.o CMakeFiles/bitcoin_static.dir/chain/header.cpp.o CMakeFiles/bitcoin_static.dir/chain/input.cpp.o CMakeFiles/bitcoin_static.dir/chain/output.cpp.o CMakeFiles/bitcoin_static.dir/chain/point.cpp.o CMakeFiles/bitcoin_static.dir/chain/point_iterator.cpp.o CMakeFiles/bitcoin_static.dir/chain/script/conditional_stack.cpp.o CMakeFiles/bitcoin_static.dir/chain/script/evaluation_context.cpp.o CMakeFiles/bitcoin_static.dir/chain/script/opcode.cpp.o CMakeFiles/bitcoin_static.dir/chain/script/operation.cpp.o CMakeFiles/bitcoin_static.dir/chain/script/script.cpp.o CMakeFiles/bitcoin_static.dir/chain/transaction.cpp.o CMakeFiles/bitcoin_static.dir/config/authority.cpp.o CMakeFiles/bitcoin_static.dir/config/base16.cpp.o CMakeFiles/bitcoin_static.dir/config/base2.cpp.o CMakeFiles/bitcoin_static.dir/config/base58.cpp.o CMakeFiles/bitcoin_static.dir/config/base64.cpp.o CMakeFiles/bitcoin_static.dir/config/checkpoint.cpp.o CMakeFiles/bitcoin_static.dir/config/directory.cpp.o CMakeFiles/bitcoin_static.dir/config/endpoint.cpp.o CMakeFiles/bitcoin_static.dir/config/hash160.cpp.o CMakeFiles/bitcoin_static.dir/config/hash256.cpp.o CMakeFiles/bitcoin_static.dir/config/parameter.cpp.o CMakeFiles/bitcoin_static.dir/config/parser.cpp.o CMakeFiles/bitcoin_static.dir/config/printer.cpp.o CMakeFiles/bitcoin_static.dir/config/sodium.cpp.o CMakeFiles/bitcoin_static.dir/constants.cpp.o CMakeFiles/bitcoin_static.dir/error.cpp.o CMakeFiles/bitcoin_static.dir/formats/base_10.cpp.o CMakeFiles/bitcoin_static.dir/formats/base_16.cpp.o CMakeFiles/bitcoin_static.dir/formats/base_58.cpp.o CMakeFiles/bitcoin_static.dir/formats/base_64.cpp.o CMakeFiles/bitcoin_static.dir/formats/base_85.cpp.o CMakeFiles/bitcoin_static.dir/math/checksum.cpp.o CMakeFiles/bitcoin_static.dir/math/crypto.cpp.o CMakeFiles/bitcoin_static.dir/math/elliptic_curve.cpp.o CMakeFiles/bitcoin_static.dir/math/hash.cpp.o CMakeFiles/bitcoin_static.dir/math/hash_number.cpp.o CMakeFiles/bitcoin_static.dir/math/script_number.cpp.o CMakeFiles/bitcoin_static.dir/math/secp256k1_initializer.cpp.o CMakeFiles/bitcoin_static.dir/math/stealth.cpp.o CMakeFiles/bitcoin_static.dir/math/uint256.cpp.o CMakeFiles/bitcoin_static.dir/message/address.cpp.o CMakeFiles/bitcoin_static.dir/message/alert.cpp.o CMakeFiles/bitcoin_static.dir/message/alert_payload.cpp.o CMakeFiles/bitcoin_static.dir/message/block_message.cpp.o CMakeFiles/bitcoin_static.dir/message/block_transactions.cpp.o CMakeFiles/bitcoin_static.dir/message/compact_block.cpp.o CMakeFiles/bitcoin_static.dir/message/fee_filter.cpp.o CMakeFiles/bitcoin_static.dir/message/filter_add.cpp.o CMakeFiles/bitcoin_static.dir/message/filter_clear.cpp.o CMakeFiles/bitcoin_static.dir/message/filter_load.cpp.o CMakeFiles/bitcoin_static.dir/message/get_address.cpp.o CMakeFiles/bitcoin_static.dir/message/get_block_transactions.cpp.o CMakeFiles/bitcoin_static.dir/message/get_blocks.cpp.o CMakeFiles/bitcoin_static.dir/message/get_data.cpp.o CMakeFiles/bitcoin_static.dir/message/get_headers.cpp.o CMakeFiles/bitcoin_static.dir/message/header_message.cpp.o CMakeFiles/bitcoin_static.dir/message/headers.cpp.o CMakeFiles/bitcoin_static.dir/message/heading.cpp.o CMakeFiles/bitcoin_static.dir/message/inventory.cpp.o CMakeFiles/bitcoin_static.dir/message/inventory_vector.cpp.o CMakeFiles/bitcoin_static.dir/message/memory_pool.cpp.o CMakeFiles/bitcoin_static.dir/message/merkle_block.cpp.o CMakeFiles/bitcoin_static.dir/message/network_address.cpp.o CMakeFiles/bitcoin_static.dir/message/not_found.cpp.o CMakeFiles/bitcoin_static.dir/message/ping.cpp.o CMakeFiles/bitcoin_static.dir/message/pong.cpp.o CMakeFiles/bitcoin_static.dir/message/prefilled_transaction.cpp.o CMakeFiles/bitcoin_static.dir/message/reject.cpp.o CMakeFiles/bitcoin_static.dir/message/send_compact_blocks.cpp.o CMakeFiles/bitcoin_static.dir/message/send_headers.cpp.o CMakeFiles/bitcoin_static.dir/message/transaction_message.cpp.o CMakeFiles/bitcoin_static.dir/message/verack.cpp.o CMakeFiles/bitcoin_static.dir/message/version.cpp.o CMakeFiles/bitcoin_static.dir/unicode/console_streambuf.cpp.o CMakeFiles/bitcoin_static.dir/unicode/ifstream.cpp.o CMakeFiles/bitcoin_static.dir/unicode/ofstream.cpp.o CMakeFiles/bitcoin_static.dir/unicode/unicode.cpp.o CMakeFiles/bitcoin_static.dir/unicode/unicode_istream.cpp.o CMakeFiles/bitcoin_static.dir/unicode/unicode_ostream.cpp.o CMakeFiles/bitcoin_static.dir/unicode/unicode_streambuf.cpp.o CMakeFiles/bitcoin_static.dir/utility/backtrace.cpp.o CMakeFiles/bitcoin_static.dir/utility/binary.cpp.o CMakeFiles/bitcoin_static.dir/utility/conditional_lock.cpp.o CMakeFiles/bitcoin_static.dir/utility/daemon.cpp.o CMakeFiles/bitcoin_static.dir/utility/deadline.cpp.o CMakeFiles/bitcoin_static.dir/utility/dispatcher.cpp.o CMakeFiles/bitcoin_static.dir/utility/istream_reader.cpp.o CMakeFiles/bitcoin_static.dir/utility/log.cpp.o CMakeFiles/bitcoin_static.dir/utility/logging.cpp.o CMakeFiles/bitcoin_static.dir/utility/monitor.cpp.o CMakeFiles/bitcoin_static.dir/utility/ostream_writer.cpp.o CMakeFiles/bitcoin_static.dir/utility/path.cpp.o CMakeFiles/bitcoin_static.dir/utility/png.cpp.o CMakeFiles/bitcoin_static.dir/utility/random.cpp.o CMakeFiles/bitcoin_static.dir/utility/resource_lock.cpp.o CMakeFiles/bitcoin_static.dir/utility/scope_lock.cpp.o CMakeFiles/bitcoin_static.dir/utility/string.cpp.o CMakeFiles/bitcoin_static.dir/utility/thread.cpp.o CMakeFiles/bitcoin_static.dir/utility/threadpool.cpp.o CMakeFiles/bitcoin_static.dir/utility/time.cpp.o CMakeFiles/bitcoin_static.dir/utility/variable_uint_size.cpp.o CMakeFiles/bitcoin_static.dir/utility/work.cpp.o CMakeFiles/bitcoin_static.dir/wallet/bitcoin_uri.cpp.o CMakeFiles/bitcoin_static.dir/wallet/dictionary.cpp.o CMakeFiles/bitcoin_static.dir/wallet/ec_private.cpp.o CMakeFiles/bitcoin_static.dir/wallet/ec_public.cpp.o CMakeFiles/bitcoin_static.dir/wallet/ek_private.cpp.o CMakeFiles/bitcoin_static.dir/wallet/ek_public.cpp.o CMakeFiles/bitcoin_static.dir/wallet/ek_token.cpp.o CMakeFiles/bitcoin_static.dir/wallet/encrypted_keys.cpp.o CMakeFiles/bitcoin_static.dir/wallet/hd_private.cpp.o CMakeFiles/bitcoin_static.dir/wallet/hd_public.cpp.o CMakeFiles/bitcoin_static.dir/wallet/message.cpp.o CMakeFiles/bitcoin_static.dir/wallet/mini_keys.cpp.o CMakeFiles/bitcoin_static.dir/wallet/mnemonic.cpp.o CMakeFiles/bitcoin_static.dir/wallet/parse_encrypted_keys/parse_encrypted_private.cpp.o CMakeFiles/bitcoin_static.dir/wallet/parse_encrypted_keys/parse_encrypted_public.cpp.o CMakeFiles/bitcoin_static.dir/wallet/parse_encrypted_keys/parse_encrypted_token.cpp.o CMakeFiles/bitcoin_static.dir/wallet/payment_address.cpp.o CMakeFiles/bitcoin_static.dir/wallet/qrcode.cpp.o CMakeFiles/bitcoin_static.dir/wallet/select_outputs.cpp.o CMakeFiles/bitcoin_static.dir/wallet/stealth_address.cpp.o CMakeFiles/bitcoin_static.dir/wallet/uri.cpp.o
/home/vorapoap/metaverse/metaverse/src/lib/network/hosts.cpp: In constructor ‘libbitcoin::network::hosts::hosts(libbitcoin::threadpool&, const libbitcoin::network::settings&)’:
/home/vorapoap/metaverse/metaverse/src/lib/network/hosts.cpp:42:12: error: invalid initialization of non-const reference of type ‘libbitcoin::threadpool&’ from an rvalue of type ‘<brace-enclosed initializer list>’
  pool_{pool}
            ^

which I believe generating the following error

/home/vorapoap/metaverse/metaverse/src/lib/consensus/miner.cpp: In static member function ‘static libbitcoin::consensus::miner::block_ptr libbitcoin::consensus::miner::create_genesis_block(bool)’:
/home/vorapoap/metaverse/metaverse/src/lib/consensus/miner.cpp:186:37: error: missing initializer for member ‘std::array<unsigned char, 32ul>::_M_elems’ [-Werror=missing-field-initializers]
  pblock->header.previous_block_hash = {};
                                     ^
make[2]: *** [src/lib/network/CMakeFiles/network_static.dir/hosts.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
cc1plus: all warnings being treated as errors
make[2]: *** [src/lib/consensus/CMakeFiles/consensus_static.dir/miner.cpp.o] Error 1
make[2]: Leaving directory `/home/vorapoap/metaverse/metaverse/build'
make[1]: *** [src/lib/consensus/CMakeFiles/consensus_static.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: Leaving directory `/home/vorapoap/metaverse/metaverse/build'
make[1]: *** [src/lib/network/CMakeFiles/network_static.dir/all] Error 2
make[1]: Leaving directory `/home/vorapoap/metaverse/metaverse/build'
make: *** [all] Error 2

After research on Google, it maybe related to C++11/C++14 standard /GCC version ?

My c++ -v reports

Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-4/root/usr/libexec/gcc/x86_64-redhat-linux/5.3.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-4/root/usr --mandir=/opt/rh/devtoolset-4/root/usr/share/man --infodir=/opt/rh/devtoolset-4/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --disable-libgcj --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-5.3.1-20160406/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 5.3.1 20160406 (Red Hat 5.3.1-6) (GCC)

A quick help on this is to tell me which gcc version you can use to build this on CentOS 7.2?

vorapoap commented 6 years ago

Hmm switching to devtoolset-7 still doesn't help Using built-in specs. COLLECT_GCC=c++ COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.2.1-20170829/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux Thread model: posix gcc version 7.2.1 20170829 (Red Hat 7.2.1-1) (GCC)

betachen commented 6 years ago

@vorapoap got same issue on GCC 6 (devtoolset-7) ?

it seems gcc version problem.

betachen commented 6 years ago

@chengzhpchn

chengzhpchn commented 6 years ago

Please check if you have installed more than one gcc version on your CentOS. Maybe you should remove all gcc versions and reinstall "gcc version 5.3.1 20160406", and try it again. My workmate has fed back the "gcc version 5.3.1 20160406" works well on his CentOS. Of cource he removed the origin gcc brought with the CentOS first.

jowenshaw commented 6 years ago

@vorapoap I am not sure this patch will solve your compiling problem as I'm not using CentOS, but you may have a try of this patch https://github.com/mvs-org/metaverse/commit/d4c9bd82302b700c3c62232f89bd5a5ff1a39ef6

vorapoap commented 6 years ago

@jowenshaw Thank you so much. The previous error has been resolved now, but the new one , same error message, different location

[52%] Building CXX object src/lib/client/CMakeFiles/client_static.dir/obelisk_client.cpp.o cd /home/vorapoap/metaverse/metaverse/build/src/lib/client && /usr/bin/c++ -DBCC_STATIC=1 -DUSE_UPNP=1 -std=c++11 -fstrict-aliasing -fvisibility=hidden -Wall -Wextra -Wstrict-aliasing=2 -Wno-unused-parameter -Wno-unused-variable -Wno-type-limits -Werror -pthread -fno-enforce-eh-specs -fnothrow-opt -Wno-reorder -Wno-ignored-qualifiers -Wno-unused-function -Wno-unused-but-set-variable -Wno-sign-compare -Wno-unused-but-set-parameter -O3 -DNDEBUG -I/usr/local/include -I/home/vorapoap/metaverse/metaverse/contrib -I/home/vorapoap/metaverse/metaverse/include -o CMakeFiles/client_static.dir/obelisk_client.cpp.o -c /home/vorapoap/metaverse/metaverse/src/lib/client/obelisk_client.cpp In file included from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/utility/assert.hpp:40:0, from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/impl/utility/data.ipp:27, from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/utility/data.hpp:156, from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/message/network_address.hpp:28, from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/constants.hpp:28, from /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin.hpp:19, from /home/vorapoap/metaverse/metaverse/include/metaverse/network/sessions/session_inbound.hpp:27, from /home/vorapoap/metaverse/metaverse/src/lib/network/sessions/session_inbound.cpp:21: /home/vorapoap/metaverse/metaverse/src/lib/network/sessions/session_inbound.cpp: In constructor ‘libbitcoin::network::session_inbound::session_inbound(libbitcoin::network::p2p&)’: /home/vorapoap/metaverse/metaverse/include/metaverse/bitcoin/utility/track.hpp:29:34: error: invalid initialization of non-const reference of type ‘libbitcoin::network::p2p&’ from an rvalue of type ‘<brace-enclosed initializer list>’ track<class_name>(#class_name) ^ /home/vorapoap/metaverse/metaverse/src/lib/network/sessions/session_inbound.cpp:41:5: note: in expansion of macro ‘CONSTRUCT_TRACK’ CONSTRUCT_TRACK(session_inbound) ^

vorapoap commented 6 years ago

I think I have passed the previous error with this patch acc218e

But I have got the new error, could someone please take a look? @jowenshaw @chengzhpchn

[ 53%] Building CXX object src/lib/blockchain/CMakeFiles/blockchain_static.dir/orphan_pool.cpp.o
cd /home/vorapoap/metaverse/metaverse/build/src/lib/blockchain && /usr/bin/c++   -DBCB_STATIC=1 -DUSE_UPNP=1 -DWITH_CONSENSUS -std=c++11 -fstrict-aliasing -fvisibility=hidden -Wall -Wextra -Wstrict-aliasing=2 -Wno-unused-parameter -Wno-unused-variable -Wno-type-limits -Werror -pthread -fno-enforce-eh-specs -fnothrow-opt -Wno-reorder -Wno-ignored-qualifiers -Wno-unused-function -Wno-unused-but-set-variable -Wno-sign-compare -Wno-unused-but-set-parameter -O3 -DNDEBUG -I/usr/local/include -I/home/vorapoap/metaverse/metaverse/contrib -I/home/vorapoap/metaverse/metaverse/include    -o CMakeFiles/blockchain_static.dir/orphan_pool.cpp.o -c /home/vorapoap/metaverse/metaverse/src/lib/blockchain/orphan_pool.cpp
/home/vorapoap/metaverse/metaverse/src/lib/blockchain/block_chain_impl.cpp: In member function ‘virtual void libbitcoin::blockchain::block_chain_impl::fetch_spend(const output_point&, libbitcoin::blockchain::block_chain::spend_fetch_handler)’:
/home/vorapoap/metaverse/metaverse/src/lib/blockchain/block_chain_impl.cpp:914:43: error: missing initializer for member ‘libbitcoin::chain::point::hash’ [-Werror=missing-field-initializers]
         handler(error::service_stopped, {});
                                           ^
/home/vorapoap/metaverse/metaverse/src/lib/blockchain/block_chain_impl.cpp:914:43: error: missing initializer for member ‘libbitcoin::chain::point::index’ [-Werror=missing-field-initializers]
vorapoap commented 6 years ago

hmm seem like compiling with devtoolset-4 will not encounter above error.