社区首页 >问答首页 >Boost绑定AIX xlc io_service运行

Boost绑定AIX xlc io_service运行
EN

Stack Overflow用户
提问于 2013-02-21 10:25:56
回答 4查看 739关注 0票数 0

我正在尝试使用boost编译项目,将asio::io_service绑定到boost::thread,并且收到一些我不知道如何解决的错误: IBM XL C/C++ for AIX,V11.1 (5724-X13),Version: 11.01.0000.0006 (AIX 7.1)

代码语言:javascript
代码运行次数:0
复制
    "/home/clag/projects/tomas/include/boost/asio/detail/posix_fd_set_adapter.hpp", line 33.30: 1540-0198 (W) The omitted keyword "private" is assumed for base class "noncopyable".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.46: 1540-0219 (S) The call to "boost::bind" has no best match.
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.58: 1540-1229 (I) Argument number 1 is an rvalue of type "overloaded function: boost::asio::io_service::run".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.100: 1540-1229 (I) Argument number 2 is an rvalue of type "const boost::reference_wrapper<const boost::asio::io_service>".
    "/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp", line 30.5: 1540-1202 (I) No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)() const, reference_wrapper<const boost::asio::io_service>)".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.58: 1540-1231 (I) The conversion from argument number 1 to "unsigned long (boost::asio::io_service::*)() const" uses the resolved overloaded function "size_t boost::asio::io_service::run()".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.100: 1540-1231 (I) The conversion from argument number 2 to "boost::reference_wrapper<const boost::asio::io_service>" uses "the identity conversion".
    "/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp", line 20.5: 1540-1202 (I) No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)(), reference_wrapper<const boost::asio::io_service>)".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.58: 1540-1231 (I) The conversion from argument number 1 to "unsigned long (boost::asio::io_service::*)()" uses the resolved overloaded function "size_t boost::asio::io_service::run()".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 50.100: 1540-1231 (I) The conversion from argument number 2 to "boost::reference_wrapper<const boost::asio::io_service>" uses "the identity conversion".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.35: 1540-0219 (S) The call to "boost::bind" has no best match.
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.47: 1540-1229 (I) Argument number 1 is an rvalue of type "overloaded function: boost::asio::io_service::run".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.98: 1540-1229 (I) Argument number 2 is an rvalue of type "boost::asio::io_service *".
    "/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp", line 30.5: 1540-1202 (I) No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)() const, io_service *)".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.47: 1540-1231 (I) The conversion from argument number 1 to "unsigned long (boost::asio::io_service::*)() const" uses the resolved overloaded function "size_t boost::asio::io_service::run()".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.98: 1540-1231 (I) The conversion from argument number 2 to "boost::asio::io_service *" uses "the identity conversion".
    "/home/clag/projects/tomas/include/boost/bind/bind_mf_cc.hpp", line 20.5: 1540-1202 (I) No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)(), io_service *)".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.47: 1540-1231 (I) The conversion from argument number 1 to "unsigned long (boost::asio::io_service::*)()" uses the resolved overloaded function "size_t boost::asio::io_service::run()".
    "/home/clag/projects/tomas/ots/src/agent/agent.cc", line 52.98: 1540-1231 (I) The conversion from argument number 2 to "boost::asio::io_service *" uses "the identity conversion".
    "/home/clag/projects/tomas/include/boost/asio/impl/write.hpp", line 276.7: 1540-0198 (W) The omitted keyword "private" is assumed for base class "detail::base_from_completion_cond<CompletionCondition>".
    "/home/clag/projects/tomas/include/boost/asio/impl/write.hpp", line 276.7: 1540-0198 (W) The omitted keyword "private" is assumed for base class "detail::base_from_completion_cond>boost::asio::detail::transfer_all_t>"

导致错误的代码:

代码语言:javascript
代码运行次数:0
复制
    acceptor_thread_.reset(new boost::thread(boost::bind(&boost::asio::io_service::run, boost::cref(*accept_io_service_))));
    for (int i = 0; i < agent_config_.threads(); i++) {
        thread_group_.create_thread(boost::bind(&boost::asio::io_service::run, work_io_service_.get()));
    }

定义:

代码语言:javascript
代码运行次数:0
复制
    boost::shared_ptr<boost::asio::io_service> accept_io_service_;
    boost::shared_ptr<boost::thread> acceptor_thread_;
    boost::shared_ptr<boost::asio::io_service> work_io_service_;
    boost::thread_group thread_group_;

顺便提一下,这可能只是一个标志选项,但我在任何地方都找不到它,因为相同的代码在Linux(GCC)、HP-UX(aCC)和Windows(MSVC)上编译得很好。

Thx请求帮助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-21 16:30:22

google快速搜索表明AIX在重载解析方面存在问题,尤其是在涉及模板的情况下。因此,尝试不同的方法来减少需要发生的重载分辨率的数量可能是值得的。

例如,可以用boost::mem_fn()代替boost::bind()

代码语言:javascript
代码运行次数:0
复制
std::size_t (io_service::*run)() = &io_service::run;
boost::thread t(boost::mem_fn(run), io_service);

此外,如果编译器在解决重载时仍然有问题,那么可以考虑编写一个简单的functor。boost::thread()构造函数的唯一要求是func参数是可复制的,并且func()必须是有效的表达式。

代码语言:javascript
代码运行次数:0
复制
struct service_runner
{
  explicit service_runner(boost::shared_ptr<boost::asio::io_service> io_service)
    : io_service(io_service)
  {}
  std::size_t operator()() { return io_service->run(); }
  boost::shared_ptr<boost::asio::io_service> io_service;
};

...

boost::thread t((service_runner(io_service)));

其他需要考虑的问题:

  • 更喜欢编译符合标准的代码,而不是使用编译器标志来允许不符合标准的代码进行编译。在本例中,io_service::run()是一个非常数成员函数,但绑定到它的accept_io_service实例参数作为常量引用通过boost::cref()传递。需要添加编译器标志,如gcc的-fpermissive,以允许编译不符合规范的代码。在使用这些选项时要非常小心,因为它们可能会屏蔽将boost::shared_ptr作为实例句柄传递给绑定调用的严重problems.
  • Consider。这将使io_service保持活动状态,只要线程仍在运行。否则,该io_service可能会在线程仍在处理其事件循环时被删除,从而导致调用未定义行为的可能性很高。
票数 2
EN

Stack Overflow用户

发布于 2013-02-25 16:41:30

只是出于好奇,您是否正在为您正在使用的编译器使用IBM boost库补丁?http://www-01.ibm.com/support/docview.wss?uid=swg27006911

票数 1
EN

Stack Overflow用户

发布于 2013-02-25 16:59:35

查看尝试的4个可能候选者的消息,差异似乎与const相关

代码语言:javascript
代码运行次数:0
复制
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)() const, reference_wrapper<const boost::asio::io_service
>)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::reference_wrapper<const boost::asio::io_service> >(unsigned long (io_service::*)(), reference_wrapper<const boost::asio::io_service>)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)() const, io_service *)".
No candidate is better than "boost::bind<unsigned long,boost::asio::io_service,boost::asio::io_service *>(unsigned long (io_service::*)(), io_service *)".

由于您使用的是V11.1编译器,因此有两个缺省情况下未启用的修复程序,您可以尝试使用以下选项

-qxflag=EnableIssue214PartialOrdering这将启用与C++核心语言问题214相关的几个修复

-qxflag=FunctionCVTmplArgDeduction2011这使得一些C++2011澄清可以用来进行参数推导

这些更改是V12.1编译器的默认更改,但不是V11.1编译器的默认更改

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14999867

复制
相关文章
Boost::asio io_service 实现分析
Boost::asio io_service 实现分析 io_service的作用 io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。 Io_servie的接口 提供的接口有run、run_one、poll、poll_one、stop、reset、dispatch、post,最常
知然
2018/03/09
2.1K0
Boost asio 官方教程
7.1. 概述 本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。 异步任务的典型例子是网络应用。 如果数据被发送出去了,比如发送至 Internet,通常需要知道数据是否发送成功。
_gongluck
2018/03/09
17.8K0
FF ASIO 异步消息网络框架
在前边 https://cloud.tencent.com/developer/article/1056482 我提到,针对前面使用boost asio 中遇到的问题,对asio进行封装,如下几个目标: 1. 创建socket、acceptor不再自己构造io_service,由于asio中的对象均要保存io_service的引用,   若要手动构造,必须保证io_service晚于所有的asio对象(如socket、acceptor)释放,但是往往socket被逻辑层保存在某个内存深处,任意一个socke
知然
2018/03/09
1.4K0
FF ASIO 异步消息网络框架
在AIX建立开机自动运行脚本
.        run-level 2 May 20 11:35      2    0    S
星哥玩云
2022/07/01
1.3K0
eos源码赏析(四):基于boost::asio的httpserver架构
eos代码更新很快,在4月初已经升级到3.0版本,随着版本的更迭,在各个操作系统下的编译、节点的运行都越来越集成化,不需要自己再一步步的下载依赖,如果感兴趣可以直接按照官方wiki进行编译。官方wiki地址:https://github.com/EOSIO/eos/wiki
用户2569546
2021/11/23
1.6K0
C++ ASIO 实现异步套接字管理
Boost ASIO(Asynchronous I/O)是一个用于异步I/O操作的C++库,该框架提供了一种方便的方式来处理网络通信、多线程编程和异步操作。特别适用于网络应用程序的开发,从基本的网络通信到复杂的异步操作,如远程控制程序、高并发服务器等都可以使用该框架。该框架的优势在于其允许处理多个并发连接,而不必创建一个线程来管理每个连接。最重要的是ASIO是一个跨平台库,可以运行在任何支持C++的平台下。
微软技术分享
2023/08/29
5300
C++ ASIO 实现异步套接字管理
4.6 C++ Boost 函数绑定回调库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。
微软技术分享
2023/10/11
2500
4.6 C++ Boost 函数绑定回调库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。
微软技术分享
2023/08/21
2810
C++ ASIO 实现异步套接字管理
Boost ASIO(Asynchronous I/O)是一个用于异步I/O操作的C++库,该框架提供了一种方便的方式来处理网络通信、多线程编程和异步操作。特别适用于网络应用程序的开发,从基本的网络通信到复杂的异步操作,如远程控制程序、高并发服务器等都可以使用该框架。该框架的优势在于其允许处理多个并发连接,而不必创建一个线程来管理每个连接。最重要的是ASIO是一个跨平台库,可以运行在任何支持C++的平台下。
微软技术分享
2023/10/11
2950
C++ ASIO 实现异步套接字管理
为什么要运行mev-boost?
这篇文章解释了 mev-boost 对网络和验证者、节点操作者和质押池(质押服务提供商)的好处。
Tiny熊
2022/11/07
7420
为什么要运行mev-boost?
Boost ASIO proactor 浅析
Boost ASIO proactor 浅析 前情提要: Boost asio 的socket的异步非阻塞模式才有的是proactor模式,当IO操作介绍后回调相应的处理函数。ASIO在Linux平台下的实现基于epoll,但是epoll只支持reactor模式,ASIO通过封装在epoll上实现了proactor。提到ASIO proactor,ASIO中的所有异步操作都是基于io_service实现的,io_service是ASIO中的任务队列,并且他负责调用epoll_wait等待IO事件到来,对io
知然
2018/03/09
2.5K0
BoostAsyncSocket 异步反弹通信案例
Boost 利用ASIO框架实现一个跨平台的反向远控程序,该远控支持保存套接字,当有套接字连入时,自动存储到map容器,当客户下线时自动从map容器中移除,当我们需要与特定客户端通信时,只需要指定客户端ID号即可。
微软技术分享
2023/03/16
8460
BoostAsyncSocket 异步反弹通信案例
4.7 C++ Boost 多线程并发库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。
微软技术分享
2023/08/21
6820
boost asio
asio包含errorcode参数的函数,不会抛出异常 可以尝试connect之后,判断错误码, boost::asio::error::already_connected 则表示已经连接 断开连接使用close,is_open不表示通断,close后需要open,connect自动打开
sofu456
2020/09/14
1.4K0
BoostAsyncSocket 异步反弹通信案例
Boost 利用ASIO框架实现一个跨平台的反向远控程序,该远控支持保存套接字,当有套接字连入时,自动存储到map容器,当客户下线时自动从map容器中移除,当我们需要与特定客户端通信时,只需要指定客户端ID号即可。
微软技术分享
2023/03/17
9180
BoostAsyncSocket 异步反弹通信案例
aix 关闭端口
关掉对应的应用程序,则端口就自然关闭了,如: “kill -9 PID” (PID:进程号) 如: 通过”netstat -anp | grep ssh” 有显示: tcp 0 127.0.0.1:2121 0.0.0.0:* LISTEN 7546/ssh 则: “kill -9 7546”
全栈程序员站长
2022/09/09
2.6K0
试试Boost.Asio
慢慢一点一点看看Boost,这段时间就Asio库吧。 据说这货和libevent的效率差不多,但是Boost的平台兼容性,你懂得。还有它帮忙干掉了很多线程安全和线程分发的事情。
owent
2023/03/06
1.9K0
使用 boost.asio 简单实现 异步Socket 通信
 客户端: class IPCClient { public: IPCClient(); ~IPCClient(); bool run(); private: bool connect(); bool conn_handler(const boost::system::error_code&ec, boost::shared_ptr<boost::asio::ip::tcp::socket> sock); bool read_handler(const boo
西湖醋鱼
2020/12/30
1.7K0
4.7 C++ Boost 多线程并发库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。
微软技术分享
2023/10/11
4580
点击加载更多

相似问题

嵌套boost::绑定io_service::post

24

永远运行boost asio io_service

12

xlc:在aix 6.1上找不到

28

在boost线程中运行boost asio io_service

10

CMAKE AIX xlc编译器未使用

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文