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。
我在编译实际项目的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。