Kompilieren von Bitcoin Core v0.10.0 auf Ubuntu 20.04

Ich versuche, Bitcoin Core v0.10.0 auf Ubuntu 20.04 zu kompilieren, aber dann erhalte ich die folgende Fehlermeldung:

rpcserver.cpp: In Funktion 'void StartRPCThreads()':
rpcserver.cpp:594:77: Fehler: keine übereinstimmende Funktion für den Aufruf von 'boost::asio::ssl::context::context(boost::asio::io_service&, boost::asio::ssl::context_base: :Methode)'
  594 | rpc_ssl_context = new ssl::context(*rpc_io_service, ssl::context::sslv23);
      | ^
In Datei eingeschlossen von /usr/include/boost/asio/ssl/context.hpp:757,
                 aus /usr/include/boost/asio/ssl.hpp:18,
                 aus rpcprotocol.h:16,
                 von rpcserver.h:10,
                 aus rpcserver.cpp:6:
/usr/include/boost/asio/ssl/impl/context.ipp:371:1: Hinweis: Kandidat: 'boost::asio::ssl::context::context(boost::asio::ssl::context&& )'
  371 | Kontext::Kontext(Kontext&& Sonstiges)
      | ^~~~~~~
/usr/include/boost/asio/ssl/impl/context.ipp:371:1: Hinweis: Kandidat erwartet 1 Argument, 2 bereitgestellt
/usr/include/boost/asio/ssl/impl/context.ipp:63:1: note: Candidate: 'boost::asio::ssl::context::context(boost::asio::ssl::context_base ::Methode)'
   63 | Kontext::Kontext(Kontext::Methode m)
      | ^~~~~~~
/usr/include/boost/asio/ssl/impl/context.ipp:63:1: Hinweis: Kandidat erwartet 1 Argument, 2 bereitgestellt
rpcserver.cpp:613:50: Fehler: „class boost::asio::ssl::context“ hat kein Mitglied namens „impl“
  613 | SSL_CTX_set_cipher_list(rpc_ssl_context->impl(), strCiphers.c_str());
      | ^~~~
rpcserver.cpp: Bei Instanziierung von 'void RPCListen(boost::shared_ptr >, boost::asio::ssl::context&, bool) [with Protocol = boost::asio::ip::tcp; SocketAcceptorService = boost::asio::executor]':
rpcserver.cpp:673:58: ab hier erforderlich
rpcserver.cpp:482:111: Fehler: „class boost::asio::basic_socket_acceptor“ hat kein Mitglied namens „get_io_service“
  482 | boost::shared_ptr > conn(new AcceptedConnectionImpl(acceptor->get_io_service(), context, fUseSSL));
      | ~~~~~~~~~~^~~~~~~~~~~~~~
In der Datei enthalten von primitives/block.h:9,
                 aus chainparams.h:11,
                 von base58.h:17,
                 aus rpcserver.cpp:8:
./primitives/transaction.h: Bei Instantiierung von 'static _OI std::__copy_move::__copy_m(_II, _II, _OI) [with _II = const CTxOut*; _OI = CTxOut*]':
/usr/include/c++/9/bits/stl_algobase.h:404:30: erforderlich von '_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = const CTxOut*; _OI = CTxOut*]'
/usr/include/c++/9/bits/stl_algobase.h:441:30: erforderlich von '_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = __gnu_cxx::__normal_iterator >; _OI = __gnu_cxx::__normal_iterator >]'
/usr/include/c++/9/bits/stl_algobase.h:474:7: erforderlich von '_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator >; _OI = __gnu_cxx::__normal_iterator >]'
/usr/include/c++/9/bits/vector.tcc:238:31: benötigt von 'std::vector& std::vector::operator=(const std::vector&) [with _Tp = CTxOut; _Alloc = std::Zuordner]'
coins.h:90:19: ab hier erforderlich
./primitives/transaction.h:103:7: Warnung: implizit deklariertes 'CScript& CScript::operator=(const CScript&)' ist veraltet [-Wdeprecated-copy]
  103 | Klasse CTxOut
      | ^~~~~~
In Datei enthalten von ./primitives/transaction.h:10,
                 von primitives/block.h:9,
                 aus chainparams.h:11,
                 von base58.h:17,
                 aus rpcserver.cpp:8:
./script/script.h:365:5: Hinweis: weil „CScript“ vom Benutzer bereitgestelltes „CScript::CScript(const CScript&)“ hat
  365 | CScript(const CScript& b) : std::vector(b.begin(), b.end()) { }
      | ^~~~~~~
In der Datei enthalten von /usr/include/c++/9/algorithm:61,
                 aus serialize.h:9,
                 von Betrag.h:9,
                 von rpcserver.h:9,
                 aus rpcserver.cpp:6:
/usr/include/c++/9/bits/stl_algobase.h:342:18: Hinweis: synthetisierte Methode 'CTxOut& CTxOut::operator=(const CTxOut&)' wird hier zuerst benötigt
  342 | *__Ergebnis = *__zuerst;
      | ~~~~~~~~~~^~~~~~~~~~
In der Datei enthalten von chain.h:11,
                 aus main.h:14,
                 aus rpcserver.cpp:10:
tinyformat.h: In statischer Member-Funktion 'static const char* tinyformat::detail::FormatIterator::streamStateFromFormat(std::ostream&, unsigned int&, const char*, int, int)':
tinyformat.h:785:21: Warnung: Diese Anweisung kann durchfallen [-Wimplicit-fallthrough=]
  785 | out.setf (std::ios::uppercase);
      | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
tinyformat.h:786:9: Hinweis: hier
  786 | Fall 'x': Fall 'p':
      | ^~~~
tinyformat.h:791:21: Warnung: Diese Anweisung kann durchfallen [-Wimplicit-fallthrough=]
  791 | out.setf (std::ios::uppercase);
      | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
tinyformat.h:792:9: Hinweis: hier
  792 | Fall 'e':
      | ^~~~
tinyformat.h:797:21: Warnung: Diese Anweisung kann durchfallen [-Wimplicit-fallthrough=]
  797 | out.setf (std::ios::uppercase);
      | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
tinyformat.h:798:9: Hinweis: hier
  798 | Fall 'f':
      | ^~~~
tinyformat.h:802:21: Warnung: Diese Anweisung kann durchfallen [-Wimplicit-fallthrough=]
  802 | out.setf (std::ios::uppercase);
      | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
tinyformat.h:803:9: Hinweis: hier
  803 | Fall 'g':
      | ^~~~
make[2]: *** [Makefile:3910: libbitcoin_server_a-rpcserver.o] Fehler 1
make[2]: Verzeichnis '/usr/local/src/bitcoin-0.10.0/src' verlassen
make[1]: *** [Makefile:6475: all-recursive] Fehler 1
make[1]: Verzeichnis '/usr/local/src/bitcoin-0.10.0/src' verlassen
make: *** [Makefile:569: all-recursive] Fehler 1

Ich habe die Anweisungen in der Datei build-unix.md befolgt und glaube, dass das Problem mit den erforderlichen Abhängigkeiten zusammenhängt, insbesondere mit dem Paket libboost-all-dev . Interessanterweise konnte ich jede veröffentlichte Version von v0.20.1 bis 0.16.0 kompilieren, aber nichts älter als das, indem ich die gleichen Anweisungen auf build-unix.md verwendete . Wenn das Problem wirklich libboost-all-dev ist , wie kann ich es lösen?

Aktualisieren:

Ich habe die Boost-Version 1.57 installiert, wie Pieter vorgeschlagen hat mit:

tar --bzip2 -xf /path/to/boost_1_57_0.tar.bz2
CD-Boost_1_57_0/
./bootstrap.sh --prefix=/usr/
./b2
sudo ./b2 installieren

Und dann, auf der Bitcoin-Wurzel, verwendet:

./configure --with-boost-liddir=LIB_DIR

Aber als Ergebnis bekam ich:

configure: error: Es konnte keine Version der boost_system-Bibliothek gefunden werden!

Und ich habe verschiedene Wege ausprobiert, aber immer das gleiche Ergebnis bekommen. Ist das nur ein Pfadproblem oder gibt es etwas anderes?

Aktualisierung 2:

Anscheinend habe ich den Pfad behoben mit:

./configure --with-boost-libdir=/usr/lib/

Aber wenn ich make starte, bekomme ich diesen Fehler .

Was ist das Problem?

Möglicherweise benötigen Sie eine ältere Version von Boost.
Weißt du welche Version? Oder gibt es einen Ort, an dem ich Informationen über die Version der Abhängigkeit für die Version eines bestimmten Bitcoin-Kerns finden kann?
Für neuere Versionen befinden sich diese Informationen in doc/dependencies.md, aber das existierte zum Zeitpunkt von 0.10.0 nicht. Ich würde einfach mit der jeweils aktuellsten Version von Boost beginnen. Bitcoin Core 0.10.0 wurde im Februar 2015 veröffentlicht, also vielleicht 1.57 oder etwas früher?
Ein weiterer Aspekt: ​​Bitcoin Core hat C++11 bis 0.13.0 nicht verwendet, aber Ihre Kompilierungsausgabe deutet darauf hin, dass Sie hier C++11 verwenden. Bei einem modernen Compiler möchten Sie das vielleicht explizit deaktivieren ( -std=c++98).
Danke Pieter. Ich werde es versuchen und mit den Ergebnissen aktualisieren.

Antworten (1)

Die beiden in den Kommentaren angesprochenen Punkte sind notwendig, um Bitcoin Core v0.10.0 zu kompilieren. Zuerst wird der beste Weg, Boost-Bibliotheken unter Unix zu installieren, in beschrieben build_unix.md, wo wir im Boost-Abschnitt haben

sudo su
./bootstrap.sh
./bjam installieren

aber für v0.10.0 benötigen wir mindestens Version 1.57 von Boost, die hier zu finden ist . Wir werden auch ältere Versionen von OpenSSL-Bibliotheken benötigen, in diesem Fall benötigte ich die Pakete libssl-devVersion 1.0.1f, libssl1.0.0Version 1.0.1f und multiarch-supportVersion 2.19.

Nach der Installation der Pakete können wir Bitcoin Core mit kompilieren

./autogen.sh
./configure --ohne-gui CXX="g++ -std=c++98"
machen
Installation machen

Die Flags in configurefolgen den Kommentaren für die C++-Version und das Fehlen einer GUI ist darauf zurückzuführen, dass v0.10.0 Qt 4-Pakete für die grafische Oberfläche anfordert, die ich nicht finden konnte. Sobald diese Schritte befolgt sind, wird der Bitcoin-Kern erfolgreich kompiliert.