XRPLF / rippled

Decentralized cryptocurrency blockchain daemon implementing the XRP Ledger protocol in C++
https://xrpl.org
ISC License
4.53k stars 1.47k forks source link

rippled doesn't build with Boost 1.66.0 #2329

Closed MarkusTeufelberger closed 6 years ago

MarkusTeufelberger commented 6 years ago

Boost 1.66.0 is out for about a month now and has started to get adopted in bleeding edge distributions.

From a quick glance it seems that especially the boost::asio code used in rippled breaks with the latest version, see for example https://travis-ci.org/MarkusTeufelberger/rippled-distrotest/jobs/310652624

MarkusTeufelberger commented 6 years ago

Referring to #2323, if you build something like ìf boost >= 1.66 use this code, else use that other code in there (probably necessary, since the interface changed on Boost side), you might also consider using boost::beast from upstream instead of your vendored fork with similar constructs. Once Boost 1.66 is more common in distributions (e.g. the next LTS Ubuntu will might have it, which is one of your 2 supported platforms), you can then in a while remove it from your code base, just like you removed support for older Boost versions in the past.

MarkusTeufelberger commented 6 years ago

Currently affected distributions:

More to come...

MarkusTeufelberger commented 6 years ago

https://github.com/ripple/rippled/blob/87742a5e6c5093bfd4ddad88b858d722a91738cd/src/beast/CMakeLists.txt#L151

also hides a problem that might get more urgent in the future...

bachase commented 6 years ago

Thanks @MarkusTeufelberger. We are already working on this, see https://ripple.com/dev-blog/boost-1-66-not-supported-rippled-0-81-0/.

gituser commented 6 years ago

I've just hit some boost error on latest develop branch as well:

boost is ii libboost-all-dev 1.58.0.1ubuntu1 (stock ubuntu 16.04).

any way to fix this @bachase @wilsonianb ?

In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h: In instantiation of 'void boost::serialization::save(Archive&, ripple::RangeSet<T>&, unsigned int) [with Archive = boost::archive::binary_oarchive; T = unsigned int; ripple::RangeSet<T> = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]':
/usr/include/boost/serialization/split_free.hpp:45:13:   required from 'static void boost::serialization::free_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::binary_oarchive; T = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
/usr/include/boost/serialization/split_free.hpp:74:18:   required from 'void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::binary_oarchive; T = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
src/ripple/basics/RangeSet.h:195:15:   required from 'void boost::serialization::serialize(Archive&, ripple::RangeSet<T>&, unsigned int) [with Archive = boost::archive::binary_oarchive; T = unsigned int; ripple::RangeSet<T> = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
/usr/include/boost/serialization/serialization.hpp:128:18:   required from 'void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::binary_oarchive; T = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
/usr/include/boost/archive/detail/oserializer.hpp:148:40:   required from 'void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::binary_oarchive; T = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
/usr/include/boost/archive/detail/oserializer.hpp:101:1:   [ skipping 3 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/archive/detail/oserializer.hpp:525:18:   required from 'void boost::archive::save(Archive&, T&) [with Archive = boost::archive::binary_oarchive; T = const boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>]'
/usr/include/boost/archive/detail/common_oarchive.hpp:69:22:   required from 'void boost::archive::detail::common_oarchive<Archive>::save_override(T&, int) [with T = const boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>; Archive = boost::archive::binary_oarchive]'
/usr/include/boost/archive/basic_binary_oarchive.hpp:81:7:   required from 'void boost::archive::basic_binary_oarchive<Archive>::save_override(const T&, int) [with T = boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>; Archive = boost::archive::binary_oarchive]'
/usr/include/boost/archive/binary_oarchive_impl.hpp:63:9:   required from 'void boost::archive::binary_oarchive_impl<Archive, Elem, Tr>::save_override(T&, int) [with T = const boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>; Archive = boost::archive::binary_oarchive; Elem = char; Tr = std::char_traits<char>]'
/usr/include/boost/archive/detail/interface_oarchive.hpp:63:9:   required from 'Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = const boost::icl::interval_set<unsigned int, std::less, boost::icl::closed_interval<unsigned int, std::less>, std::allocator>; Archive = boost::archive::binary_oarchive]'
src/test/basics/RangeSet_test.cpp:89:19:   required from here
src/ripple/basics/RangeSet.h:171:8: error: no match for 'operator<<' (operand types are 'boost::archive::binary_oarchive' and 'std::size_t {aka long unsigned int}')
     ar << rs.iterative_size();
        ^
In file included from /usr/include/boost/archive/detail/common_oarchive.hpp:22:0,
                 from /usr/include/boost/archive/basic_binary_oarchive.hpp:34,
                 from /usr/include/boost/archive/binary_oarchive_impl.hpp:23,
                 from /usr/include/boost/archive/binary_oarchive.hpp:21,
                 from src/test/basics/RangeSet_test.cpp:24,
                 from src/test/unity/basics_test_unity.cpp:28:
/usr/include/boost/archive/detail/interface_oarchive.hpp:62:15: note: candidate: Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = long unsigned int; Archive = boost::archive::binary_oarchive] <near match>
     Archive & operator<<(T & t){
               ^
/usr/include/boost/archive/detail/interface_oarchive.hpp:62:15: note:   conversion of argument 1 would be ill-formed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: error: invalid initialization of non-const reference of type 'long unsigned int&' from an rvalue of type 'std::size_t {aka long unsigned int}'
     ar << rs.iterative_size();
        ^
In file included from src/beast/include/beast/core/string.hpp:22:0,
                 from src/ripple/basics/Log.h:24,
                 from src/ripple/basics/TaggedCache.h:24,
                 from src/test/basics/TaggedCache_test.cpp:22,
                 from src/test/unity/basics_test_unity.cpp:31:
/usr/include/boost/utility/string_ref.hpp:440:5: note: candidate: template<class charT, class traits> std::basic_ostream<_CharT, _Traits>& boost::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::basic_string_ref<charT, traits>&)
     operator<<(std::basic_ostream<charT, traits>& os, const basic_string_ref<charT,traits>& str) {
     ^
/usr/include/boost/utility/string_ref.hpp:440:5: note:   template argument deduction/substitution failed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: note:   'boost::archive::binary_oarchive' is not derived from 'std::basic_ostream<_CharT, _Traits>'
     ar << rs.iterative_size();
        ^
In file included from /usr/include/boost/format.hpp:53:0,
                 from src/ripple/basics/StringUtilities.h:26,
                 from src/test/basics/StringUtilities_test.cpp:22,
                 from src/test/unity/basics_test_unity.cpp:30:
/usr/include/boost/format/free_funcs.hpp:33:9: note: candidate: template<class Ch, class Tr, class Alloc> std::basic_ostream<_CharT, _Traits>& boost::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::basic_format<Ch, Tr, Alloc>&)
         operator<<( std::basic_ostream<Ch, Tr> & os,
         ^
/usr/include/boost/format/free_funcs.hpp:33:9: note:   template argument deduction/substitution failed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: note:   'boost::archive::binary_oarchive' is not derived from 'std::basic_ostream<_CharT, _Traits>'
     ar << rs.iterative_size();
        ^
In file included from /usr/include/boost/range/iterator_range.hpp:14:0,
                 from /usr/include/boost/range/as_literal.hpp:22,
                 from /usr/include/boost/algorithm/string/trim.hpp:19,
                 from /usr/include/boost/algorithm/string.hpp:19,
                 from src/test/basics/base_uint_test.cpp:24,
                 from src/test/unity/basics_test_unity.cpp:21:
/usr/include/boost/range/iterator_range_io.hpp:55:49: note: candidate: template<class IteratorT, class Elem, class Traits> std::basic_ostream<_CharT, _Traits>& boost::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::iterator_range<IteratorT>&)
         inline std::basic_ostream<Elem,Traits>& operator<<( 
                                                 ^
/usr/include/boost/range/iterator_range_io.hpp:55:49: note:   template argument deduction/substitution failed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: note:   'boost::archive::binary_oarchive' is not derived from 'std::basic_ostream<_CharT, _Traits>'
     ar << rs.iterative_size();
        ^
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from /usr/include/boost/filesystem/path.hpp:29,
                 from /usr/include/boost/filesystem.hpp:16,
                 from src/beast/extras/beast/unit_test/suite.hpp:12,
                 from src/ripple/beast/unit_test.h:30,
                 from src/test/basics/base_uint_test.cpp:23,
                 from src/test/unity/basics_test_unity.cpp:21:
/usr/include/boost/smart_ptr/shared_ptr.hpp:852:64: note: candidate: template<class E, class T, class Y> std::basic_ostream<_CharT, _Traits>& boost::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::shared_ptr<Y>&)
 template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
                                                                ^
/usr/include/boost/smart_ptr/shared_ptr.hpp:852:64: note:   template argument deduction/substitution failed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: note:   'boost::archive::binary_oarchive' is not derived from 'std::basic_ostream<_CharT, _Traits>'
     ar << rs.iterative_size();
        ^
In file included from /usr/include/boost/optional.hpp:15:0,
                 from src/beast/extras/beast/unit_test/reporter.hpp:14,
                 from src/ripple/beast/unit_test.h:27,
                 from src/test/basics/base_uint_test.cpp:23,
                 from src/test/unity/basics_test_unity.cpp:21:
/usr/include/boost/optional/optional.hpp:1254:1: note: candidate: template<class CharType, class CharTrait> std::basic_ostream<_CharT, _Traits>& boost::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::optional_detail::optional_tag&)
 operator<<(std::basic_ostream<CharType, CharTrait>& out, optional_detail::optional_tag const& v)
 ^
/usr/include/boost/optional/optional.hpp:1254:1: note:   template argument deduction/substitution failed:
In file included from src/test/basics/RangeSet_test.cpp:21:0,
                 from src/test/unity/basics_test_unity.cpp:28:
src/ripple/basics/RangeSet.h:171:8: note:   'boost::archive::binary_oarchive' is not derived from 'std::basic_ostream<_CharT, _Traits>'
     ar << rs.iterative_size();
        ^
scons: *** [build/gcc.release/src/test/unity/basics_test_unity.o] Error 1
scons: building terminated because of errors.
seelabs commented 6 years ago

@gituser Thanks for the report. Using boost 1.65.1 will fix these errors.

gituser commented 6 years ago

@seelabs Sure, it will. But the problem is that I'm using specifically Ubuntu 16.04 as you recommend to avoid installing manual packages and/or dependencies thus breaking my system.

Any possibility to fix this in the code to make rippled to build with boost 1.58 as before it was working fine?

Also, here you state https://ripple.com/dev-blog/boost-1-66-not-supported-rippled-0-81-0/ that 1.58.0 is fully supported.

MarkusTeufelberger commented 6 years ago

@gituser Thanks for the report. Using boost 1.65.1 will fix these errors.

There is no good official source for a current version of boost on Ubuntu 16.04, there are no backports: https://packages.ubuntu.com/xenial/libboost-all-dev

@gituser - rippled builds on artful and bionic (currently not yet released), you might want to wait until April/May and just use the next LTS. Until then you could also look into building a rippled Docker container instead of installing it natively.

seelabs commented 6 years ago

@gituser I will discuss it with the rest of the team later this morning. Something to be aware of is we're going to switch to boost 1.66 very soon. When we do this rippled will require boost 1.66 or better; older version will no longer be supported. If we merge the boost 1.66 support for the next beta (to be discussed), then it doesn't make sense to fix the broken boost 1.58 build.

gituser commented 6 years ago

@MarkusTeufelberger wait May? It's not possible.

@seelabs I understand you guys do want to use cutting edge technologies there, but what about users? as @MarkusTeufelberger pointed out there is not even stable packages for distributions what's the point of such a rush?

Also, breaking testnet with a requirement of newer version each time is kinda harsh for developers.

seelabs commented 6 years ago

@gituser The driving force for boost 1.66 adoption is boost::beast. Beast was originally part of rippled and is a key building block. The beast developer submitted it to boost and it was accepted. Now that it's part of boost we need to use boost 1.66 in order to get important bug fixes (or back-port the bug fixes ourselves, which is less attractive).

gituser commented 6 years ago

@seelabs I've tried building with boost 1.65.1 as you've suggested (installed it in /usr/local prefix manually via ./b2 --with=all install ) and now I got this:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/usr/bin/g++ -o build/gcc.release/rippled -pthread -rdynamic -g -fuse-ld=gold build/gcc.release/src/ripple/beast/unity/beast_insight_unity.o build/gcc.release/src/ripple/beast/unity/beast_net_unity.o build/gcc.release/src/ripple/beast/unity/beast_utility_unity.o build/gcc.release/src/ripple/unity/app_consensus.o build/gcc.release/src/ripple/unity/app_ledger.o build/gcc.release/src/ripple/unity/app_ledger_impl.o build/gcc.release/src/ripple/unity/app_main1.o build/gcc.release/src/ripple/unity/app_main2.o build/gcc.release/src/ripple/unity/app_misc.o build/gcc.release/src/ripple/unity/app_misc_impl.o build/gcc.release/src/ripple/unity/app_paths.o build/gcc.release/src/ripple/unity/app_tx.o build/gcc.release/src/ripple/unity/conditions.o build/gcc.release/src/ripple/unity/consensus.o build/gcc.release/src/ripple/unity/core.o build/gcc.release/src/ripple/unity/basics.o build/gcc.release/src/ripple/unity/crypto.o build/gcc.release/src/ripple/unity/ledger.o build/gcc.release/src/ripple/unity/net.o build/gcc.release/src/ripple/unity/overlay1.o build/gcc.release/src/ripple/unity/overlay2.o build/gcc.release/src/ripple/unity/peerfinder.o build/gcc.release/src/ripple/unity/json.o build/gcc.release/src/ripple/unity/protocol.o build/gcc.release/src/ripple/unity/rpcx1.o build/gcc.release/src/ripple/unity/rpcx2.o build/gcc.release/src/ripple/unity/shamap.o build/gcc.release/src/ripple/unity/server.o build/gcc.release/src/test/unity/app_test_unity1.o build/gcc.release/src/test/unity/app_test_unity2.o build/gcc.release/src/test/unity/basics_test_unity.o build/gcc.release/src/test/unity/beast_test_unity1.o build/gcc.release/src/test/unity/beast_test_unity2.o build/gcc.release/src/test/unity/consensus_test_unity.o build/gcc.release/src/test/unity/core_test_unity.o build/gcc.release/src/test/unity/conditions_test_unity.o build/gcc.release/src/test/unity/json_test_unity.o build/gcc.release/src/test/unity/ledger_test_unity.o build/gcc.release/src/test/unity/overlay_test_unity.o build/gcc.release/src/test/unity/peerfinder_test_unity.o build/gcc.release/src/test/unity/protocol_test_unity.o build/gcc.release/src/test/unity/resource_test_unity.o build/gcc.release/src/test/unity/rpc_test_unity.o build/gcc.release/src/test/unity/server_test_unity.o build/gcc.release/src/test/unity/server_status_test_unity.o build/gcc.release/src/test/unity/shamap_test_unity.o build/gcc.release/src/test/unity/jtx_unity1.o build/gcc.release/src/test/unity/jtx_unity2.o build/gcc.release/src/test/unity/csf_unity.o build/gcc.release/src/ripple/unity/nodestore.o build/gcc.release/src/test/unity/nodestore_test_unity.o build/gcc.release/src/ripple/unity/soci.o build/gcc.release/src/ripple/unity/soci_ripple.o build/gcc.release/src/ripple/unity/secp256k1.o build/gcc.release/src/ripple/beast/unity/beast_hash_unity.o build/gcc.release/src/ripple/unity/beast.o build/gcc.release/src/ripple/unity/lz4.o build/gcc.release/src/ripple/unity/protobuf.o build/gcc.release/src/ripple/unity/ripple.proto.o build/gcc.release/src/ripple/unity/resource.o build/gcc.release/src/sqlite/sqlite_unity.o build/gcc.release/src/ripple/unity/ed25519_donna.o build/gcc.release/src/ripple/unity/rocksdb.o build/gcc.release/src/ripple/unity/snappy.o -lssl -ldl -lcrypto -ldl -lprotobuf -lpthread -lz -ldl -lboost_chrono -lboost_coroutine -lboost_context -lboost_date_time -lboost_filesystem -lboost_program_options -lboost_regex -lboost_system -lboost_thread -lboost_serialization -lrt
/usr/local/include/boost/archive/binary_iarchive_impl.hpp:58: error: undefined reference to 'boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>::load_override(boost::archive::class_name_type&)'
/usr/local/include/boost/serialization/throw_exception.hpp:36: error: undefined reference to 'boost::archive::archive_exception::archive_exception(boost::archive::archive_exception const&)'
/usr/include/c++/5/bits/unique_ptr.h:765: error: undefined reference to 'Json::Writer::Writer(std::function<void (boost::basic_string_view<char, std::char_traits<char> > const&)> const&)'
src/test/json/Output_test.cpp:35: error: undefined reference to 'Json::outputJson(Json::Value const&, std::function<void (boost::basic_string_view<char, std::char_traits<char> > const&)> const&)'
src/test/overlay/TMHello_test.cpp:46: error: undefined reference to 'ripple::parse_ProtocolVersions(boost::basic_string_view<char, std::char_traits<char> > const&)'
/usr/local/include/boost/coroutine/detail/pull_coroutine_impl.hpp:320: error: undefined reference to 'boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/local/include/boost/coroutine/detail/pull_coroutine_impl.hpp:320: error: undefined reference to 'boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:59: error: undefined reference to 'boost::coroutines::detail::coroutine_context::coroutine_context(void (*)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:59: error: undefined reference to 'boost::coroutines::detail::coroutine_context::coroutine_context(void (*)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:59: error: undefined reference to 'boost::coroutines::detail::coroutine_context::coroutine_context(void (*)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:59: error: undefined reference to 'boost::coroutines::detail::coroutine_context::coroutine_context(void (*)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:302: error: undefined reference to 'boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/local/include/boost/coroutine/detail/push_coroutine_object.hpp:302: error: undefined reference to 'boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*)'
/usr/local/include/boost/archive/detail/interface_iarchive.hpp:68: error: undefined reference to 'boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load_override(boost::archive::class_name_type&)'
/usr/local/include/boost/regex/v4/perl_matcher.hpp:383: error: undefined reference to 'boost::re_detail_106501::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp:1352: error: undefined reference to 'boost::re_detail_106501::put_mem_block(void*)'
/usr/local/include/boost/regex/pattern_except.hpp:75: error: undefined reference to 'boost::re_detail_106501::raise_runtime_error(std::runtime_error const&)'
/usr/local/include/boost/regex/v4/cpp_regex_traits.hpp:449: error: undefined reference to 'boost::re_detail_106501::get_default_error_string(boost::regex_constants::error_type)'
/usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp:222: error: undefined reference to 'boost::re_detail_106501::get_mem_block()'
/usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp:107: error: undefined reference to 'boost::re_detail_106501::get_mem_block()'
/usr/local/include/boost/regex/v4/perl_matcher_common.hpp:214: error: undefined reference to 'boost::re_detail_106501::verify_options(unsigned int, boost::regex_constants::_match_flags)'
/usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: error: undefined reference to 'boost::re_detail_106501::put_mem_block(void*)'
/usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp:115: error: undefined reference to 'boost::re_detail_106501::put_mem_block(void*)'
/usr/local/include/boost/regex/v4/cpp_regex_traits.hpp:966: error: undefined reference to 'boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
/usr/local/include/boost/regex/v4/cpp_regex_traits.hpp:962: error: undefined reference to 'boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
collect2: error: ld returned 1 exit status
scons: *** [build/gcc.release/rippled] Error 1
scons: building terminated because of errors.
seelabs commented 6 years ago

@gituser I regularly build with boost 1.65.1 on ubuntu 16.04. I'll see if I can figure out what the issue is.

Until I do, let me suggest two solutions that might get you unstuck: 1) Uninstall the old boost 1.58 and rebuild. 2) If that doesn't work, or is otherwise unacceptable, build boost 1.65.1 in a user directory, but do not install it (i.e. ./bootstrap.sh ./b2) then set the environment variable BOOST_ROOT to point to that directory.

gituser commented 6 years ago

@seelabs I've tried this, removed 1.58.0, removed build directory and tried to rebuild - no luck.

I'm gonna try now your other solution and get back.

gituser commented 6 years ago

@seelabs

the solution with BOOST_ROOT worked fine for me and it seems rippled binary is static without any boost dependencies.

Thank you.

seelabs commented 6 years ago

@gituser Glad you are unstuck and thank you for the reports and feedback.

MarkusTeufelberger commented 6 years ago

I guess I'll close this one, since rippled now ONLY builds with Boost 1.66+... :-)