以下平台和编译器组合经过定期测试
以下平台也可能适用
__USE_W32_SOCKETS
。)为了链接使用 Boost.Asio 的程序,必须提供以下库
boost::system::error_code
和 boost::system::system_error
类。spawn()
启动协程,则需要 Boost.Coroutine 库(可选)。boost::regex
参数的 read_until()
或 async_read_until()
重载,则需要 Boost.Regex 库(可选)。此外,一些示例还需要 Boost.Thread、Boost.Date_Time 或 Boost.Serialization 库。
![]() |
注意 |
---|---|
对于 MSVC 或 Borland C++,您可能希望将 |
您可以通过从 Boost 下载包的根目录运行以下命令来构建使用 Boost.Asio 及其示例所需的 Boost 库子集
b2 --with-system --with-thread --with-date_time --with-regex --with-serialization stage
这假定您已经构建了 b2
。有关更多详细信息,请参阅 Boost.Build 文档。
默认情况下,Boost.Asio 是一个仅头文件的库。但是,一些开发人员可能更喜欢使用单独编译的源代码构建 Boost.Asio。为此,请将 #include <boost/asio/impl/src.hpp>
添加到一个(且仅一个)源文件中,然后在项目/编译器设置中定义 BOOST_ASIO_SEPARATE_COMPILATION
来构建程序。或者,可以定义 BOOST_ASIO_DYN_LINK
以将单独编译的 Boost.Asio 构建为共享库的一部分。
如果使用 Boost.Asio 的 SSL 支持,您还需要添加 #include <boost/asio/ssl/impl/src.hpp>
。
可在 https://github.com/chriskohlhoff/asio-debugger-extensions 找到一些用于 Asio 的调试器扩展。
下表列出的宏可用于控制 Boost.Asio 的接口、功能和行为。
宏 |
描述 |
---|---|
|
禁用 Boost.Asio 的已弃用接口和功能。 请参阅网络 TS 兼容性,查看已弃用的旧接口及其替换列表。 |
|
禁用 Boost.Asio 对网络 TS 执行器模型的支持。 默认情况下,Boost.Asio 同时支持网络 TS 风格的执行器和符合提议的标准执行器模型的执行器。此宏可用于将支持限制为仅提议的标准执行器。有关更多信息,请参阅提议的标准执行器。 |
|
指定
这个新名称可能会破坏直接使用旧的网络 TS 风格多态包装器 有关更多信息,请参阅提议的标准执行器。 |
|
禁用对 默认情况下,动态缓冲区操作(例如 当定义 |
|
启用 Boost.Asio 的缓冲区调试支持,这可以帮助识别何时在读取或写入操作中使用无效缓冲区(例如,如果要写入的 std::string 对象在写入操作完成之前被销毁)。 当使用 Microsoft Visual C++ 11.0 或更高版本时,如果编译器的迭代器调试支持已启用,则会自动定义此宏,除非已定义 当使用 g++ 时,如果标准库调试已启用(定义了 |
|
显式禁用 Boost.Asio 的缓冲区调试支持。 |
|
启用 Boost.Asio 的 处理程序跟踪调试工具。 |
|
显式禁用 Solaris 上的 |
|
显式禁用 Linux 上的 |
|
显式禁用 Linux 上的 |
|
显式禁用 macOS 和 BSD 变体上的 |
|
显式禁用 Windows 上的 I/O 完成端口支持,强制使用基于 |
|
显式禁用 Boost.Asio 的线程支持,与整个 Boost 是否支持线程无关。 |
|
默认情况下,Boost.Asio 在为 Windows 编译时会自动定义 |
|
默认情况下,Boost.Asio 在为 Windows 编译时会自动定义 |
|
当使用 Microsoft Visual C++ 或 Borland C++ 为 Windows 编译时,Boost.Asio 将自动链接必要的 Windows SDK 库以支持套接字(即 |
|
在旧版本的 Windows 上启用
|
|
禁用 Boost.Asio 中 |
|
确定 Boost.Asio 内部 一些例子
|
|
更改 |
|
对 Boost.Asio 的实现使用单独编译的源代码。 有关更多信息,请参见上文可选的独立编译。 |
|
对 Boost.Asio 的实现使用单独编译的源代码,并导出符号以包含为共享库的一部分。 有关更多信息,请参见上文可选的独立编译。 |
|
禁用所有符号可见性编译指示。 注意:如果符号被隐藏,则必须格外小心,以确保 Boost.Asio 类型不会跨共享库 API 边界传递。 |
Asio 自动定义与特定编译器和目标平台上检测到的可用特性相对应的预处理器宏。这些宏以 BOOST_ASIO_HAS_
为前缀命名,并在下表中列出。
许多这些宏还具有相应的 BOOST_ASIO_DISABLE_
宏,可用于显式禁用该特性。
通常,BOOST_ASIO_HAS_
宏不应由用户显式定义,除非绝对必要作为最新版本编译器或平台的解决方法。对于较旧的编译器/平台组合,其中未自动定义特定的 BOOST_ASIO_HAS_
宏,测试可能表明声明的特性与 Boost.Asio 的需求不兼容。
宏 |
描述 |
禁用特性的宏 |
---|---|---|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
Boost align 库。 |
|
|
Boost array 库。 |
|
|
Boost assert 宏。 |
|
|
Boost bind 函数。 |
|
|
Boost 对 chrono 的支持。 |
|
|
Boost.Config 库可用。 |
|
|
Boost 对 Context 库光纤的支持。 |
|
|
Boost 对 Coroutine 库的支持。 |
|
|
Boost 对 DateTime 库的支持。 |
|
|
Boost limits 头文件。 |
|
|
Boost regex 库。 |
|
|
Boost 对 source_location 和系统错误的支持。 |
|
|
Boost throw_exception 函数。 |
|
|
Boost 的 BOOST_WORKAROUND 宏。 |
|
|
某种形式的 chrono 库可用。 |
|
|
Clang / libc++ 检测。 |
|
|
在已知允许概念的编译器上支持概念。 |
|
|
在已知允许的编译器上支持常量表达式的 SFINAE 用法。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
在已知允许的编译器上支持 co_await 关键字。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
Solaris: /dev/poll。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
Linux: epoll, eventfd, timerfd 和 io_uring。 |
|
|
Linux: epoll, eventfd, timerfd 和 io_uring。 |
|
|
文件。 |
|
|
可以使用 getaddrinfo() 和 getnameinfo()。 |
|
|
处理程序挂钩。对于旧的 Borland C++ 和 gcc 编译器禁用。 |
|
|
Windows: IO 完成端口。 |
|
|
Linux: io_uring 用于代替 epoll。 |
|
|
Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue。 |
|
|
UNIX 域套接字。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
内核支持 MSG_NOSIGNAL。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
在已知允许的编译器上支持函数类型上的 noexcept。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
管道。 |
|
|
POSIX: 面向流的文件描述符。 |
|
|
POSIX 线程。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
在已知允许的编译器上支持返回类型推导。 |
|
|
Microsoft Visual C++ 的安全 C 运行时库。 |
|
|
串行端口。 |
|
|
在已知允许的编译器上支持 SFINAEed 模板变量。 |
|
|
可以使用 sigaction() 代替 signal()。 |
|
|
可以使用 signal()。 |
|
|
标准库支持 snprintf。 |
|
|
标准库有一个我们可以使用的 source_location。 |
|
|
支持 POSIX ssize_t typedef。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持对齐分配。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::any。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
在已知允许概念的编译器上支持概念。 |
|
|
标准库支持协程。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::experimental::source_location。 |
|
|
标准库支持 std::experimental::string_view。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::index_sequence。 |
|
|
标准库具有 invoke_result(取代了 result_of)。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::string_view。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::to_address。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
标准库支持 std::variant。 |
|
|
标准库有一个我们可以使用的 string_view。 |
|
|
线程。 |
|
|
支持 __thread 关键字扩展或等效项。 |
|
|
Linux: epoll, eventfd, timerfd 和 io_uring。 |
|
|
在 POSIX(和类 POSIX)平台上,我们需要包含 unistd.h 以访问各种平台特性宏,例如,能够测试线程支持。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
在已知允许的编译器上支持模板变量。 |
|
|
支持在 lambda 中捕获参数包。 |
|
|
始终启用。为向后兼容用户代码而保留。 |
|
|
Windows: 对象句柄。 |
|
|
Windows: OVERLAPPED 包装器。 |
|
|
Windows: 随机访问句柄。 |
|
|
Windows: 流句柄。 |
|
|
为缺乏工作表达式 SFINAE 启用解决方法。 |
|
可以在 SourceForge.net 上找到专门用于 Boost.Asio 的邮件列表。新闻组访问通过 Gmane 提供。