欲启用 boost::asio 对于 io_uring 的支持,这需要以下几个先决条件;
1、boost 1.78 及以上发行版本
Revision History - 1.78.0 (boost.org)
2、Linux kernel 5.10 及以上发行版本
3、在预定义头文件(stdafx.h)、或编译器预定义宏(如:cmake、premake 内预定义)
定义下述两个宏,注意是两个缺一不可,宏定义值设为:1。
BOOST_ASIO_HAS_IO_URING
= 1
BOOST_ASIO_DISABLE_EPOLL = 1
CMAKE之中可以写下述语句:
方法一:
target_compile_definitions(main
PRIVATE
BOOST_ASIO_HAS_IO_URING=1
BOOST_ASIO_DISABLE_EPOLL=1
)
方法二:
# ADD_DEFINITIONS(-DBOOST_ASIO_HAS_IO_URING=1)
# ADD_DEFINITIONS(-DBOOST_ASIO_DISABLE_EPOLL=1)
Ubuntu 18.04 LTS上面编译需要修改头文件
/usr/include/linux/version.h
把该文件内容替换成下面这个。
//#define LINUX_VERSION_CODE 266002
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#define LINUX_VERSION_CODE KERNEL_VERSION(5,10,0)
编译完成之后想要编译epoll版本,在把替换之前得内容还原回去。
编译程序需要添加对于 liburing.a 库得链接,另外 ubuntu 18.04 lts 上面没法安装 liburing,所以需要手动去编译库。
在 github 上面去下载 release 得包自己编译,目前最新版本是 2.5,内核必须 5.10,否则尝试运行 boost/asio 会出问题,不是链接不上就是崩溃这些问题。