【问题标题】:makefile.unix:188: obj/magirpc.o Error 1 when compilingmakefile.unix:188: obj/magirpc.o 编译时出现错误 1
【发布时间】:2021-06-28 17:20:48
【问题描述】:

当我编译magi wallet(使用this 指南)时,我在编译时遇到了这些错误。在 Bing 和 Google 上搜索后,我似乎没有找到解决方案,唯一提到这一点的是实际项目的 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

谢谢,

呸呸呸

【问题讨论】:

  • 这不是错误。这只是来自 make 的一条消息,告诉您编译失败。此错误可能与 make 或 makefile 无关,但无法从该信息中得知。您必须更早地查看输出并找到编译器错误(调试构建问题时总是会发现 first 失败,而不是最后一个)。如果需要任何帮助,我们需要查看调用 make 的编译行和编译器给出的错误(至少是第一批,如果有很多的话)。
  • 请编辑您的问题并添加信息,使用正确的格式而不是将其放入评论中。很难理解无法格式化的 cmets 中的内容。另外,请在出现此错误之前显示编译器调用。在我看来,您可能有不同版本的 Boost,或者其他什么。
  • 你好@MadScientist,我现在更新了帖子,提供了更多信息和出现的错误。如果您需要更多信息,请告诉我。感谢您迄今为止的帮助。

标签: makefile compiler-errors


【解决方案1】:

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

查看 Boost 文档,我可以看到当前的最新版本确实需要两个参数;请参阅https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/reference/basic_socket_acceptor.html 我可以看到直到版本 1.69 需要一个参数一个参数版本;见https://www.boost.org/doc/libs/1_69_0/doc/html/boost_asio/reference/basic_socket_acceptor.html

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

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

【讨论】:

  • 嘿@MadScientist,我已经成功安装了新版本的boost,但是我收到this 错误,在搜索了一下之后我发现this 帖子显示尝试安装所有内容。尝试安装 libboost1.55-all-dev 时(这似乎可行)我收到 this 错误,并且所需的大多数软件包都依赖于 libboost-date-time1.55,当我尝试安装时我收到 @987654326 @ 错误。你能帮帮我吗?
  • 并非如此。看起来没有有效版本的 boost 库可用作您的操作系统的软件包(您没有指定您正在使用哪个发行版)。如果你需要它,你必须自己构建它,它会出现。我使用的是 Ubuntu 20.04,我什至没有看到可用的 libboost 版本(我拥有的最旧版本是 1.67)。
猜你喜欢
  • 2018-12-27
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-16
  • 2023-04-11
  • 1970-01-01
  • 2018-06-18
相关资源
最近更新 更多