在macOS编译Wt_4.10.4时遭遇Wt::AsioWrapper相关赋值错误
macOS编译Wt 4.10.4时的赋值错误问题
编译步骤
执行的编译命令如下:
cd <wt/download/directory> mkdir build cd build cmake ../ make -j8
错误详情
编译时触发以下错误:
/Users/thomaspeters/Development/C-Projects/wt-4.10.4/src/http/Server.C:334:11: error: object of type 'asio::ip::tcp::resolver::query' (aka 'basic_resolver_query<boost::asio::ip::tcp>') cannot be assigned because its copy assignment operator is implicitly deleted 334 | query = Wt::AsioWrapper::asio::ip::tcp::resolver::query(Wt::AsioWrapper::asio::ip::tcp::v6(), address, "http"); | ^ /usr/local/include/boost/asio/ip/basic_resolver_query.hpp:225:3: note: copy assignment operator is implicitly deleted because 'basic_resolver_query<boost::asio::ip::tcp>' has a user-declared move constructor 225 | basic_resolver_query(basic_resolver_query&& other) | ^ 1 warning and 1 error generated. make[2]: *** [src/http/CMakeFiles/wthttp.dir/Server.C.o] Error 1 make[1]: *** [src/http/CMakeFiles/wthttp.dir/all] Error 2 make: *** [all] Error 2
核心问题:boost::asio::ip::basic_resolver_query类因声明了移动构造函数,导致拷贝赋值运算符被C++标准隐式删除,而Wt源码中直接使用了拷贝赋值操作,因此编译失败。
环境信息
- Boost版本:1.85.0(已通过
./bootstrap和./b2 install完成编译安装) - macOS版本:
ProductName: macOS Product Version: 15.0 BuildVersion: 24A5298h - 处理器:2.3 GHz 8-Core Intel Core i9
- Wt版本:wt-4.10.4
解决方法
方法1:修改Wt源码
定位到wt-4.10.4/src/http/Server.C第334行,将赋值操作替换为以下两种方式之一:
- 直接初始化新变量(推荐):
auto query = Wt::AsioWrapper::asio::ip::tcp::resolver::query(Wt::AsioWrapper::asio::ip::tcp::v6(), address, "http"); - 使用移动赋值:
query = std::move(Wt::AsioWrapper::asio::ip::tcp::resolver::query(Wt::AsioWrapper::asio::ip::tcp::v6(), address, "http"));
修改后重新执行make -j8即可。
方法2:升级Wt版本
Wt 4.10.4之后的版本可能已修复与Boost 1.85的兼容性问题,升级到新版本后重新编译即可。
方法3:降级Boost版本
若不想修改源码,可将Boost降级到1.84或更早版本,这些版本中basic_resolver_query仍支持拷贝赋值操作。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

