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?
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?
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?
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-dev
Version 1.0.1f, libssl1.0.0
Version 1.0.1f und multiarch-support
Version 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 configure
folgen 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.
Pieter Wuille
ID_Gehirn
Pieter Wuille
Pieter Wuille
-std=c++98
).ID_Gehirn