You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost1.77.0 Websocket编译报executor_非法使用void类型错误求助

问题根因

这个编译错误确实由项目中的.cu(CUDA)文件触发。
Boost 1.77.0的Asio组件使用了C17的定制点对象特性实现execution::outstanding_work.tracked的优先调度逻辑,但你当前版本的NVCC(CUDA编译器)对该C17特性的支持存在缺陷:当NVCC编译包含Boost.Asio头文件的单元时,会错误推导prefer_result的返回类型为void,最终导致composed_work_guard类的executor_成员类型为void,触发C2182错误。
你新建的纯C++解决方案没有调用NVCC编译,用的是MSVC原生编译器,因此不会触发这个兼容问题。

修复方案
  • 依赖隔离:将Boost.Beast/WebSocket的相关逻辑封装到独立的纯C++编译单元(.cpp/.h)中,保证这些头文件不会被任何.cu文件直接或间接引用,CUDA单元仅调用封装后的无Boost依赖的接口即可。
  • 宏定义兼容:如果无法完全隔离头文件引用,可在所有引入Boost.Asio相关头文件的位置之前,添加宏定义:
    #define BOOST_ASIO_DISABLE_CUSTOMIZATION_POINT_OBJECTS
    
    该宏会强制Asio回退到旧版的函数重载实现逻辑,避开NVCC不支持的C++17定制点特性。
  • 版本升级:可选升级Boost到1.79及以上版本,该版本已专门修复了NVCC编译Asio的兼容问题;也可升级CUDA工具包到11.6及以上版本,新版NVCC对C++17特性的支持更完善,可直接解决该推导错误。

内容的提问来源于stack exchange,提问作者Castigliano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:06:02