makefile.unix:188: obj/magirpc.o 编译时报错1

makefile.unix:188: obj/magirpc.o Error 1 when compiling

我在编译实际项目的magi wallet (Using this guide) I came across these errors when compiling it. After searching around on Bing and Google I seem to have found no solution for this and the only mention of this at all is in the makefile的时候。我没有找到任何关于如何解决这个问题的方法,而且 GitHub 存储库已经有大约 3 年没有更新了,而且没有人在那里回答问题。谁能帮我? (下面列出了所有错误,并按出现时间排序)

magirpc.cpp: At global scope:
magirpc.cpp:668:102: error: wrong number of template arguments (2, should be 1)
static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:668:104: error: template argument 1 is invalid
static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:678:95: error: wrong number of template arguments (2, should be 1)
static void RPCListen(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:678:97: error: template argument 1 is invalid
static void RPCListen(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:683:91: error: base operand of ‘->’ is not a pointer
 AcceptedConnectionImpl<Protocol>* conn = new AcceptedConnectionImpl<Protocol>(acceptor->get_io_service(), context, fUseSSL);

magirpc.cpp:685:13: error: base operand of ‘->’ is not a pointer
 acceptor->async_accept(

magirpc.cpp:700:102: error: wrong number of template arguments (2, should be 1)
static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:700:104: error: template argument 1 is invalid
static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor,

magirpc.cpp:710:17: error: base operand of ‘->’ is not a pointer
  && acceptor->is_open())

magirpc.cpp:711:45: error: no matching function for call to ‘RPCListen(int&, boost::asio::ssl::context&, const bool&)’
     RPCListen(acceptor, context, fUseSSL);

magirpc.cpp:775:58: error: no matching function for call to ‘boost::asio::ssl::context::context(boost::asio::io_service&, boost::asio::ssl::context_base::method)’
 ssl::context context(io_service, ssl::context::sslv23);

magirpc.cpp:791:41: error: ‘class boost::asio::ssl::context’ has no member named ‘impl’
     SSL_CTX_set_cipher_list(context.impl(), strCiphers.c_str());

magirpc.cpp:816:45: error: no matching function for call to ‘RPCListen(boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp> >&, boost::asio::ssl::context&, const bool&)’
     RPCListen(acceptor, context, fUseSSL);

magirpc.cpp:842:49: error: no matching function for call to ‘RPCListen(boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp> >&, boost::asio::ssl::context&, const bool&)’
         RPCListen(acceptor, context, fUseSSL);

magirpc.cpp:1085:58: error: no matching function for call to ‘boost::asio::ssl::context::context(boost::asio::io_service&, boost::asio::ssl::context_base::method)’
 ssl::context context(io_service, ssl::context::sslv23);

make: *** [makefile.unix:188: obj/magirpc.o] Error 1

注意:有关构建的完整日志,请单击 here

谢谢,

swanserquack

如上所述,在我看来这段代码需要与您正在使用的版本不同的 Boost 版本。您正在使用的 boost 版本需要 basic_socket_acceptor 模板的一个参数,而此代码试图传递两个参数。

查看 Boost 文档,我可以看到当前最新版本确实需要两个参数;见 https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/reference/basic_socket_acceptor.html And I can see that up to version 1.69 wanted one argument one-argument version; see https://www.boost.org/doc/libs/1_69_0/doc/html/boost_asio/reference/basic_socket_acceptor.html

似乎在 Boost 1.70 中更改了此签名。

看来您尝试编译的 Boost 版本太旧,而这组代码希望您使用较新的版本,因此您需要升级您的 Boost。